Kubernetes集群多Master容错配置技巧有哪些

18次阅读
没有评论

丸趣 TV 小编给大家分享一下 Kubernetes 集群多 Master 容错配置技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1、kube-apiserver

修改两处:

修改其主服务地址,指向与主节点一致的虚拟 IP(设置参考《Keepalived 快速使用(Ubuntu18.04)》)。

修改 etcd 服务的地址和证书文件目录。

开始编辑:

sudo nano /etc/kubernetes/manifests/kube-apiserver.yaml

最后的 kube-apiserver.yaml 文件如下:

# /etc/kubernetes/manifests/kube-apiserver.yaml
apiVersion: v1
kind: Pod
metadata:
 annotations:
 scheduler.alpha.kubernetes.io/critical-pod:  
 creationTimestamp: null
 labels:
 component: kube-apiserver
 tier: control-plane
 name: kube-apiserver
 namespace: kube-system
spec:
 containers:
 - command:
 - kube-apiserver
 - --authorization-mode=Node,RBAC
 - --advertise-address=10.1.1.199
 - --allow-privileged=true
 - --client-ca-file=/etc/kubernetes/pki/ca.crt
 - --enable-admission-plugins=NodeRestriction
 - --enable-bootstrap-token-auth=true
# - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
# - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
# - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
# - --etcd-servers=https://127.0.0.1:2379
 - --etcd-cafile=/etc/kubernetes/pki/etcd-certs/ca.pem
 - --etcd-certfile=/etc/kubernetes/pki/etcd-certs/client.pem
 - --etcd-keyfile=/etc/kubernetes/pki/etcd-certs/client-key.pem
 - --etcd-servers=https://10.1.1.201:2379
 - --insecure-port=0
 - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
 - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
 - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
 - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
 - --requestheader-allowed-names=front-proxy-client
 - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
 - --requestheader-extra-headers-prefix=X-Remote-Extra-
 - --requestheader-group-headers=X-Remote-Group
 - --requestheader-username-headers=X-Remote-User
 - --secure-port=6443
 - --service-account-key-file=/etc/kubernetes/pki/sa.pub
 - --service-cluster-ip-range=10.96.0.0/12
 - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
 - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
 image: k8s.gcr.io/kube-apiserver:v1.13.1
 imagePullPolicy: IfNotPresent
 livenessProbe:
 failureThreshold: 8
 httpGet:
 host: 10.1.1.199
 path: /healthz
 port: 6443
 scheme: HTTPS
 initialDelaySeconds: 15
 timeoutSeconds: 15
 name: kube-apiserver
 resources:
 requests:
 cpu: 250m
 volumeMounts:
 - mountPath: /etc/ssl/certs
 name: ca-certs
 readOnly: true
 - mountPath: /etc/ca-certificates
 name: etc-ca-certificates
 readOnly: true
 - mountPath: /etc/pki
 name: etc-pki
 readOnly: true
 - mountPath: /etc/kubernetes/pki
 name: k8s-certs
 readOnly: true
 - mountPath: /usr/local/share/ca-certificates
 name: usr-local-share-ca-certificates
 readOnly: true
 - mountPath: /usr/share/ca-certificates
 name: usr-share-ca-certificates
 readOnly: true
 hostNetwork: true
 priorityClassName: system-cluster-critical
 volumes:
 - hostPath:
 path: /etc/ssl/certs
 type: DirectoryOrCreate
 name: ca-certs
 - hostPath:
 path: /etc/ca-certificates
 type: DirectoryOrCreate
 name: etc-ca-certificates
 - hostPath:
 path: /etc/pki
 type: DirectoryOrCreate
 name: etc-pki
 - hostPath:
 path: /etc/kubernetes/pki
 type: DirectoryOrCreate
 name: k8s-certs
 - hostPath:
 path: /usr/local/share/ca-certificates
 type: DirectoryOrCreate
 name: usr-local-share-ca-certificates
 - hostPath:
 path: /usr/share/ca-certificates
 type: DirectoryOrCreate
 name: usr-share-ca-certificates
status: {}

注意

这里主要修改了 –advertise-address=10.1.1.199 和 –etcd-servers=https://10.1.1.201:2379。

二者的 IP 地址不一样,199 为虚拟 IP,201 为当前节点的 etcd 服务地址。

2、kube-control-manager、kube-schedule

kube-control-manager 和 kube-schedule 实例通过访问 apiserver 服务接口来获取集群状态和执行集群内部管理、维护工作,支持多运行实例的并发访问,对 apiserver 加锁来选择主控制器。

kube-control-manager 主要负责节点状态的一致性保障,包括 /etc/kubernetes/manifests/kube-control-manager.yaml 和 etc/kubernetes/control-manager.conf 两个文件。

kube-schedule 主要负责 pod 实例的调度,包括 /etc/kubernetes/manifests/kube-schedule.yaml 和 etc/kubernetes/schedule.conf 两个文件。

Kubeadm 的默认安装,已经将 kube-control-manager 和 kube-schedule 的 elect 设置为 true,支持多实例运行,只需要将其复制到副节点的 /etc/kubernetes 就可以了。

具体操作如下:

#  复制 control-manager 和 schedule 的配置文件到本地。#  参考  https://my.oschina.net/u/2306127/blog/write/2991361
#  首先登录到远程节点,然后再执行下面的命令。echo  Clone control-manager configuration file. 
scp root@10.1.1.201:/etc/kubernetes/control-manager.conf /etc/kubernetes/
scp root@10.1.1.201:/etc/kubernetes/manifests/kube-control-manager.yaml /etc/kubernetes/manifests/
echo  Clone schedule configuration file. 
scp root@10.1.1.201:/etc/kubernetes/schedule.conf /etc/kubernetes/
scp root@10.1.1.201:/etc/kubernetes/manifests/kube-schedule.yaml /etc/kubernetes/manifests/

重启 kubelet,将自动重启 control-manager 和 schedule 实例。

3、admin.conf

在主节点挂掉后,需要在副节点上使用 kubectl。首先将 admin.conf 复制到副节点上,然后将其配置到本地账户。

具体操作如下:

#  复制 admin.conf
scp root@10.1.1.201:/etc/kubernetes/admin.conf /etc/kubernetes/
#  创建本地账户访问目录, 用户配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

admin.conf 的主 IP 地址通过虚拟 IP 访问,不需要进行任何修改。

4、kubectl 操作

现在,之前的副节点已经可以执行 Master 上面的所有操作了(所有节点都可以执行)。试一下:

# Kubernetes 版本。kubectl version
#  集群信息,服务地址。kubectl cluster-info
#  集群节点列表。kubectl get node -o wide
#  集群运行的所有 pod 信息。kubectl get pod --all-namespaces -o wide

检查一下,新升级的副节点和主节点的输出信息是否一致。如果不一致:

检查 etcd 集群的一致性(详情参考《Kubernetes 1.13.1 的 etcd 集群扩容实战技巧》)。

kube-control-manager、kube-schedule 的容器实例是否运行正常,参数配置是否正确。

以上是“Kubernetes 集群多 Master 容错配置技巧有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!