centos

k8s在centos上的高可用性配置

小樊
53
2025-07-25 02:17:53
栏目: 智能运维

在CentOS上配置Kubernetes(k8s)的高可用性(HA)涉及多个组件和步骤。以下是一个基本的指南,帮助你在CentOS上设置一个高可用的Kubernetes集群。

前提条件

  1. CentOS 7或8:确保你使用的是CentOS 7或8。
  2. 网络配置:所有节点之间需要能够通过网络通信。
  3. 防火墙配置:确保必要的端口是开放的。
  4. DNS配置:确保所有节点可以通过DNS解析彼此的名称。

步骤

1. 安装必要的软件包

在所有节点上安装必要的软件包:

sudo yum install -y epel-release
sudo yum update -y
sudo yum install -y kubelet kubeadm kubectl docker

2. 配置Docker

确保Docker在所有节点上运行,并配置为使用systemd来管理容器:

sudo systemctl enable --now docker
sudo systemctl daemon-reload

3. 初始化主节点

在主节点上初始化Kubernetes集群:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

记录下输出的kubeadm join命令,稍后在从节点上使用。

4. 配置kubectl

在主节点上配置kubectl以便你可以管理集群:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

5. 安装网络插件

为了使Pod能够通信,你需要安装一个网络插件。这里以Calico为例:

kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml

6. 加入工作节点

在每个工作节点上运行主节点输出的kubeadm join命令,将它们加入到集群中。

7. 配置高可用性控制平面

为了使控制平面高可用,你需要部署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

8. 配置kubelet使用etcd

在每个节点上配置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集群。请根据你的具体需求和环境进行调整。

0
看了该问题的人还看了