在CentOS上自動化部署Kubernetes(k8s)集群可以通過多種方法實現,包括使用配置管理工具(如Ansible、Puppet、Chef)、腳本自動化以及容器編排工具(如kubeadm)。以下是一些常見的方法和步驟:
kubeadm是一個用于初始化Kubernetes控制平面和添加工作節點的工具。以下是一個基本的自動化部署步驟:
kubeadm init
命令初始化Master節點,并配置API服務器地址、鏡像倉庫和Pod網絡CIDR。kubeadm join
命令加入集群。可以編寫一個自動化腳本來執行上述步驟。以下是一個簡單的示例腳本:
#!/bin/bash
# 環境配置
echo "配置環境..."
hostnamectl set-hostname $1
sed -i 's/SELINUX.*/SELINUXdisabled/' /etc/selinux/config
sed -i '/swap/s///#/g' /etc/fstab
yum -y install ca-certificates curl
# 安裝Docker
echo "安裝Docker..."
yum -y install docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
# 修改Docker的cgroup driver
echo "修改Docker的cgroup driver..."
mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["https://mirrors.aliyun.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
# 安裝Kubernetes組件
echo "安裝Kubernetes組件..."
yum -y install kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
kubectl version
# 初始化Master節點
echo "初始化Master節點..."
kubeadm init --apiserver-advertise-address=xxx.xxx.xxx.xxx --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
# 加入Worker節點
echo "加入Worker節點..."
kubeadm join xxx.xxx.xxx.xxx:xxxx --token=xxxx --discovery-token-ca-cert-hash=sha256:xxxx
配置管理工具如Ansible可以更靈活地管理和部署Kubernetes集群。以下是一個使用Ansible的簡單示例:
yum -y install ansible
---
- name: Deploy Kubernetes on CentOS
hosts: all
become: yes
tasks:
- name: Configure hosts
lineinfile:
path: /etc/hosts
line: "{{ item.1 }}"
state: present
with_items:
- "192.168.1.100 k8s-master"
- "192.168.1.101 k8s-node1"
- "192.168.1.102 k8s-node2"
- name: Disable firewalld and SELinux
lineinfile:
path: /etc/selinux/config
line: "SELINUX=disabled"
state: present
when: ansible_facts['os_family'] == "RedHat"
- name: Disable Swap
lineinfile:
path: /etc/fstab
line: "/dev/mapper/centos-swap swap swap defaults 0 0"
state: absent
- name: Install Docker
yum:
name: docker
state: present
- name: Install Kubernetes packages
yum:
name: kubelet kubeadm kubectl
state: present
- name: Initialize Master node
command: kubeadm init --apiserver-advertise-address={{ inventory_hostname }} --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
args:
chdir: /root
- name: Join Worker nodes
command: kubeadm join {{ inventory_hostname }}:6443 --token={{ lookup('file', '/etc/kubernetes/admin.conf') | base64decode }} --discovery-token-ca-cert-hash=sha256:{{ lookup('file', '/etc/kubernetes/admin.conf') | base64decode | hash('sha256') }}
args:
chdir: /root
ansible-playbook -i hosts deploy_kubernetes.yml
通過上述方法,您可以在CentOS上實現Kubernetes集群的自動化部署。選擇哪種方法取決于您的具體需求和環境。