在CentOS上自动化部署Kubernetes(K8s)集群可以通过多种工具和方法来实现。以下是一些常见的方法和步骤:
kubeadm是Kubernetes官方提供的工具,用于初始化和管理Kubernetes集群。以下是一个基本的步骤指南:
systemctl stop firewalld
和 systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
swapoff -ased -i '/swap/s//#/' /etc/fstab
hostnamectl set-hostname k8s-master
和编辑 /etc/hosts
文件kubeadm init --apiserver-advertise-address <master-ip> --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.0 --service-cidr 10.96.0.0/12 --pod-network-cidr 10.244.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm token create --print-join-command
复制该命令到所有Worker节点上并执行。
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl get nodes
kubectl get pods --all-namespaces
Ansible是一个强大的自动化工具,可以用来部署和管理Kubernetes集群。
创建Ansible playbook: 编写Ansible playbook来定义Kubernetes集群的部署步骤,包括安装Docker、kubeadm、kubelet等组件,以及初始化Master节点和加入Node节点。
执行部署: 运行Ansible playbook,Ansible会自动执行定义的部署任务。
可以编写自定义脚本来实现Kubernetes的自动化部署。以下是一个简单的示例脚本:
#!/bin/bash
# 定义要部署的CentOS主机列表
hosts=("host1" "host2" "host3")
# 在master主机上获取token和hash值的函数
get_token_and_hash() {
token=$(ssh master "sudo kubeadm token create --print-join-command" | awk '{print $5}')
hash=$(ssh master "openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst")
}
# 安装Docker/kubeadm/kubelet
install_docker() {
yum -y install ca-certificates curl
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable docker && systemctl start docker
sed -i 's/cgroup driver/native.cgroup driversystemd/' /etc/docker/daemon.json
systemctl daemon-reload && systemctl restart docker
}
# 安装Kubernetes组件
install_kubernetes() {
yum install -y kubelet-1.22.0 kubeadm-1.22.0 kubectl-1.22.0
systemctl enable kubelet && systemctl start kubelet
}
# 初始化Master节点
init_master() {
kubeadm init --apiserver-advertise-address <master-ip> --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.0 --service-cidr 10.96.0.0/12 --pod-network-cidr 10.244.0.0/16
}
# 加入Node节点
join_node() {
kubeadm token create --print-join-command
ssh master "bash -s"
}
# 主循环
for host in "${hosts[@]}"; do
ssh $host "install_docker"
ssh $host "install_kubernetes"
done
ssh new_node "get_token_and_hash"
ssh master "init_master"
ssh node1 "join_node"
ssh node2 "join_node"
请注意,上述步骤中的版本号和具体命令可能会因不同的CentOS版本和Kubernetes版本而有所差异。建议参考最新的官方文档或教程以确保部署成功。