在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集群的自动化部署。选择哪种方法取决于您的具体需求和环境。