在CentOS上配置Kubernetes(k8s)的高可用性(HA)涉及多个组件和步骤。以下是一个基本的指南,帮助你在CentOS上设置一个高可用的Kubernetes集群。
在所有节点上安装必要的软件包:
sudo yum install -y epel-release
sudo yum update -y
sudo yum install -y kubelet kubeadm kubectl docker
确保Docker在所有节点上运行,并配置为使用systemd来管理容器:
sudo systemctl enable --now docker
sudo systemctl daemon-reload
在主节点上初始化Kubernetes集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
记录下输出的kubeadm join命令,稍后在从节点上使用。
在主节点上配置kubectl以便你可以管理集群:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
为了使Pod能够通信,你需要安装一个网络插件。这里以Calico为例:
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
在每个工作节点上运行主节点输出的kubeadm join命令,将它们加入到集群中。
为了使控制平面高可用,你需要部署etcd集群。以下是一个基本的etcd部署示例:
apiVersion: v1
kind: ConfigMap
metadata:
name: etcd-config
namespace: kube-system
data:
etcd.conf: |
[server]
initial-cluster = etcd-master=http://etcd-master:2380
initial-advertise-peer-urls = http://etcd-master:2380
listen-peer-urls = http://etcd-master:2380
advertise-client-urls = http://etcd-master:2379
listen-client-urls = http://etcd-master:2379
initial-cluster-token = etcd-cluster-1
initial-cluster-state = new
quorum-read-only = false
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: etcd-data
namespace: kube-system
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: etcd
namespace: kube-system
spec:
serviceName: "etcd"
replicas: 3
selector:
matchLabels:
app: etcd
template:
metadata:
labels:
app: etcd
spec:
containers:
- name: etcd
image: quay.io/coreos/etcd:v3.5.0
command:
- etcd
- --name
- $(POD_NAME)
- --data-dir
- /var/lib/etcd
- --initial-advertise-peer-urls
- http://etcd-$(POD_NAME).etcd:2380
- --listen-peer-urls
- http://etcd-$(POD_NAME).etcd:2380
- --listen-client-urls
- http://etcd-$(POD_NAME).etcd:2379
- --advertise-client-urls
- http://etcd-$(POD_NAME).etcd:2379
- --initial-cluster
- etcd-master=http://etcd-master:2380,etcd-0=http://etcd-0.etcd:2380,etcd-1=http://etcd-1.etcd:2380,etcd-2=http://etcd-2.etcd:2380
- --initial-cluster-token
- etcd-cluster-1
- --initial-cluster-state
- new
volumeMounts:
- name: etcd-data
mountPath: /var/lib/etcd
volumeClaimTemplates:
- metadata:
name: etcd-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
将上述YAML文件保存为etcd-deployment.yaml,然后运行:
kubectl apply -f etcd-deployment.yaml
在每个节点上配置kubelet使用新的etcd集群:
sudo sed -i 's|KUBELET_EXTRA_ARGS="--pod-infra-container-image=registry.access.redhat.com/ubi8/pod-infrastructure:latest"|KUBELET_EXTRA_ARGS="--pod-infra-container-image=registry.access.redhat.com/ubi8/pod-infrastructure:latest --etcd-servers=https://etcd-master.etcd:2379,https://etcd-0.etcd:2379,https://etcd-1.etcd:2379,https://etcd-2.etcd:2379"|' /var/lib/kubelet/config.yaml
sudo systemctl restart kubelet
确保所有组件都正常运行:
kubectl get nodes
kubectl get pods --all-namespaces
通过以上步骤,你应该能够在CentOS上配置一个高可用的Kubernetes集群。请根据你的具体需求和环境进行调整。