3. 镜像搭建Etcd

镜像部署ETCD

kubernetes 系统使用 etcd 数据库存储所有数据,该数据库是很好的学习范例,此处不展开相关资料。

使用的变量

#IPADR=100.69.218.95 当前部署的机器 IP
#对外暴露端口2379 通信端口2380

部署步骤

创建证书

为了保证通信安全,客户端(如 etcdctl) 与 etcd 集群、组件之间的通信使用TLS进行加密。
在cfssldir目录下创建证书文件。
创建 etcd 证书签名请求:

$ cat > etcd-csr.json <<EOF
{
  "CN": "etcd",
  "hosts": [
    "127.0.0.1",
    "100.69.218.95"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF

生成 etcd 证书和私钥

$ cfssl gencert -ca=/root/cfssldir/ca.pem \
  -ca-key=/root/cfssldir/ca-key.pem \
  -config=/root/cfssldir/ca-config.json \
  -profile=kubernetes etcd-csr.json | cfssljson -bare etcd
$ ls etcd*
etcd.csr  etcd-csr.json  etcd-key.pem etcd.pem
#在根目录下创建用于部署etcd的文件,并拷贝证书到该目录
$ mkdir -p /root/etcddockerfile
$ cp  ca.pem etcd.pem etcd-key.pem /root/etcddockerfile

etcd部署

创建Dockerfile与docker-entrypoint.sh文件用于创建镜像

$ cd /root/etcddockerfile
$ docker pull harbor.cmft.com/kubernetes1.18/etcd-amd64:3.2.18 #若从外网环境下拉取镜像可选择gcr.io官方拉取
$ vim docker-entrypoint.sh
#!/bin/sh
ETCD_CMD=" etcd --name etcd0 --data-dir /data/k8s/etcd/data \
--cert-file etcd.pem \
--key-file etcd-key.pem \
--trusted-ca-file ca.pem \
--peer-cert-file etcd.pem \
--peer-key-file etcd-key.pem \
--peer-trusted-ca-file ca.pem \
--peer-client-cert-auth \
--client-cert-auth \
--listen-client-urls https://0.0.0.0:2379  \
--advertise-client-urls https://127.0.0.1:2379 \
--listen-peer-urls https://0.0.0.0:2380 \
--initial-cluster etcd0=https://127.0.0.1:2380 \
--initial-cluster-token my-etcd0 \
--initial-advertise-peer-urls https://127.0.0.1:2380 "
echo -e "Running '$ETCD_CMD'\nBEGIN ETCD OUTPUT\n"
exec $ETCD_CMD
  • 指定 etcd 的工作目录和数据目录为 /data/k8s/etcd/data,需在启动服务前创建这个目录;
  • 为了保证通信安全,需要指定 etcd 的公私钥(cert-filekey-file)、Peers 通信的公私钥和 CA 证书(peer-cert-filepeer-key-filepeer-trusted-ca-file)、客户端的CA证书(trusted-ca-file);
  • 由于docker的网络环境,监听端口地址listen-client-urls必须为 https://0.0.0.0:2379
$ vim Dockerfile
FROM harbor.cmft.com/kubernetes1.18/etcd-amd64:3.2.18
MAINTAINER  linyx002
RUN mkdir -p /data/k8s/etcd/data \
    mkdir -p /data/k8s/etcd/wal \
    mkdir -p /kubernetes/network
COPY  etcd-key.pem /
COPY  etcd.pem /
COPY  ca.pem /
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
  • 目录/kubernetes/network为后续部署flannel网络时的必要目录。

接下来创建镜像并启动etcd,进行功能验证

$ docker build -t harbor.cmft.com/kubernetes1.18/etcd-amd64:3.2.18 . #后面有个点
#看到成功构建信息后执行以下命令
$docker run -d  -p 2379:2379 -p 2380:2380 --name="etcd0" harbor.cmft.com/kubernetes1.18/etcd-amd64:3.2.18
#进入容器内部查看etcd状态
$ docker exec -it etcd0 sh
#执行如下命令
ETCDCTL_API=3 etcdctl \
  --cacert=ca.pem \
  --cert=etcd.pem \
  --key=etcd-key.pem \
  endpoint health
  #返回以下命令时成功
127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.013236ms

  • -p 2379:2379 -p 2380:2380表示绑定docker端口与本机端口
  • 若发生错误,可使用exit命令退出容器并使用 docker logs etcd0命令查看日志
posted @ 2021-10-04 16:55  backTraced  阅读(190)  评论(0编辑  收藏  举报