[kubernetes]4-3 高可用集群部署(下)
4-3 高可用集群部署(下)
6.3 创建service文件
# scp配置文件到每个master节点
$ scp /root/kubernetes-ha-binary/target/services/kube-controller-manager.service <user>@<node-ip>:/etc/systemd/system/
6.4 启动服务
# 依次启动服务
$ systemctl daemon-reload && systemctl enable kube-controller-manager && systemctl restart kube-controller-manager
# 检查状态
$ service kube-controller-manager status
# 查看日志
$ journalctl -f -u kube-controller-manager
这里如果出现报错 需要等待一会 或者重启试试 一开始master02 和master03 有报错.可能是我再windows上起的虚拟机的缘故
后来master02好了 但是可能网络问题 master03 偶尔还是会报错
# 查看leader
$ kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml
7. 部署scheduler(master节点)
scheduler启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 leader 节点不可用后,剩余节点将再次进行选举产生新的 leader 节点,从而保证服务的可用性。
7.1 创建证书和私钥
# 生成证书、私钥
$ cd /root/kubernetes-ha-binary/target/pki/scheduler
$ cfssl gencert -ca=../ca.pem \
-ca-key=../ca-key.pem \
-config=../ca-config.json \
-profile=kubernetes scheduler-csr.json | cfssljson -bare kube-scheduler
7.2 创建scheduler的kubeconfig
# 创建kubeconfig
$ kubectl config set-cluster kubernetes \
--certificate-authority=../ca.pem \
--embed-certs=true \
--server=https://<MASTER_VIP>:6443 \
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config set-credentials system:kube-scheduler \
--client-certificate=kube-scheduler.pem \
--client-key=kube-scheduler-key.pem \
--embed-certs=true \
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config set-context system:kube-scheduler \
--cluster=kubernetes \
--user=system:kube-scheduler \
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config use-context system:kube-scheduler --kubeconfig=kube-scheduler.kubeconfig
# 分发kubeconfig
$ scp kube-scheduler.kubeconfig <user>@<node-ip>:/etc/kubernetes/
7.3 创建service文件
# scp配置文件到每个master节点
$ scp /root/kubernetes-ha-binary/target/services/kube-scheduler.service <user>@<node-ip>:/etc/systemd/system/
7.4 启动服务
# 启动服务
$ systemctl daemon-reload && systemctl enable kube-scheduler && systemctl restart kube-scheduler
# 检查状态
$ service kube-scheduler status
# 查看日志
$ journalctl -f -u kube-scheduler
# 查看leader
$ kubectl get endpoints kube-scheduler --namespace=kube-system -o yaml
8. 部署kubelet(worker节点)
8.1 预先下载需要的镜像
# 预先下载镜像到所有节点(由于镜像下载的速度过慢,我给大家提供了阿里云仓库的镜像)
$ scp /root/kubernetes-ha-binary/target/configs/download-images.sh <user>@<node-ip>:~
# 在目标节点上执行脚本下载镜像
$ sh ~/download-images.sh
8.2 创建bootstrap配置文件
# 创建 token
$ cd /root/kubernetes-ha-binary/target/pki/admin
$ export BOOTSTRAP_TOKEN=$(kubeadm token create \
--description kubelet-bootstrap-token \
--groups system:bootstrappers:worker \
--kubeconfig kube.config)
# 设置集群参数
$ kubectl config set-cluster kubernetes \
--certificate-authority=../ca.pem \
--embed-certs=true \
--server=https://<MASTER_VIP>:6443 \
--kubeconfig=kubelet-bootstrap.kubeconfig
# 设置客户端认证参数
$ kubectl config set-credentials kubelet-bootstrap \
--token=${BOOTSTRAP_TOKEN} \
--kubeconfig=kubelet-bootstrap.kubeconfig
# 设置上下文参数
$ kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=kubelet-bootstrap.kubeconfig
# 设置默认上下文
$ kubectl config use-context default --kubeconfig=kubelet-bootstrap.kubeconfig
# 先在worker节点上创建目录
$ mkdir -p /etc/kubernetes/pki
# 把生成的配置copy到每个worker节点上
$ scp kubelet-bootstrap.kubeconfig <user>@<node-ip>:/etc/kubernetes/kubelet-bootstrap.kubeconfig
# 把ca分发到每个worker节点
$ scp /root/kubernetes-ha-binary/target/pki/ca.pem <user>@<node-ip>:/etc/kubernetes/pki/
8.3 kubelet配置文件
把kubelet配置文件分发到每个worker节点上
$ scp /root/kubernetes-ha-binary/target/worker-<node-ip>/kubelet.config.json <user>@<node-ip>:/etc/kubernetes/
8.4 kubelet服务文件
把kubelet服务文件分发到每个worker节点上
$ scp /root/kubernetes-ha-binary/target/worker-<node-ip>/kubelet.service <user>@<node-ip>:/etc/systemd/system/
8.5 启动服务
kublet 启动时查找配置的 --kubeletconfig 文件是否存在,如果不存在则使用 --bootstrap-kubeconfig 向 kube-apiserver 发送证书签名请求 (CSR)。
kube-apiserver 收到 CSR 请求后,对其中的 Token 进行认证(事先使用 kubeadm 创建的 token),认证通过后将请求的 user 设置为 system:bootstrap:,group 设置为 system:bootstrappers,这就是Bootstrap Token Auth。
# bootstrap附权 在master01上做
$ kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --group=system:bootstrappers
# 启动服务
$ mkdir -p /var/lib/kubelet
$ systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet
# 在master上查看并Approve bootstrap请求
$ kubectl get csr
$ kubectl certificate approve <name>
# 查看服务状态
$ service kubelet status
# 查看日志 会查看到网络插件的
$ journalctl -f -u kubelet
9. 部署kube-proxy(worker节点)
9.1 创建证书和私钥
$ cd /root/kubernetes-ha-binary/target/pki/proxy
$ cfssl gencert -ca=../ca.pem \
-ca-key=../ca-key.pem \
-config=../ca-config.json \
-profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
9.2 创建和分发 kubeconfig 文件
# 创建kube-proxy.kubeconfig
$ kubectl config set-cluster kubernetes \
--certificate-authority=../ca.pem \
--embed-certs=true \
--server=https://<master-vip>:6443 \
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config set-credentials kube-proxy \
--client-certificate=kube-proxy.pem \
--client-key=kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
# 分发kube-proxy.kubeconfig
$ scp kube-proxy.kubeconfig <user>@<node-ip>:/etc/kubernetes/
9.3 分发kube-proxy.config
$ scp /root/kubernetes-ha-binary/target/worker-<node-ip>/kube-proxy.config.yaml <user>@<node-ip>:/etc/kubernetes/
9.4 分发kube-proxy服务文件
$ scp /root/kubernetes-ha-binary/target/services/kube-proxy.service <user>@<node-ip>:/etc/systemd/system/
9.5 启动服务
# 创建依赖目录
$ mkdir -p /var/lib/kube-proxy && mkdir -p /var/log/kubernetes
# 启动服务
$ systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy
# 查看状态
$ service kube-proxy status
# 查看日志
$ journalctl -f -u kube-proxy
10. 部署CNI插件 - calico
我们使用calico官方的安装方式来部署。
# 创建目录(在配置了kubectl的节点上执行)
$ mkdir -p /etc/kubernetes/addons
# 上传calico配置到配置好kubectl的节点(一个节点即可)
$ scp /root/kubernetes-ha-binary/target/addons/calico* <user>@<node-ip>:/etc/kubernetes/addons/
# 部署calico
$ kubectl create -f /etc/kubernetes/addons/calico-rbac-kdd.yaml
$ kubectl create -f /etc/kubernetes/addons/calico.yaml
# 查看状态
$ kubectl get pods -n kube-system
11. 部署DNS插件 - coredns
# 上传配置文件
$ scp /root/kubernetes-ha-binary/target/addons/coredns.yaml <user>@<node-ip>:/etc/kubernetes/addons/
# 部署coredns
$ kubectl create -f /etc/kubernetes/addons/coredns.yaml