丸趣 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 行业资讯频道!