自動化部署CentOS上的Kubernetes(k8s)集群可以大大提高效率和一致性。以下是一個詳細的步驟指南,幫助你實現這一目標。
在所有節點上執行以下命令,安裝必要的基礎軟件包:
yum update -y
yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm
為每個節點配置靜態IP地址,并確保它們在同一個網段內:
# 編輯網絡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改以下內容
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
# 重啟網絡服務
systemctl restart network
在所有節點上安裝Docker,并配置Docker使用systemd作為cgroup driver:
# 添加Docker的yum源
cat > /etc/yum.repos.d/docker-ce.repo <<EOF
[docker-ce]
name=Docker CE
baseurl=https://download.docker.com/linux/centos/docker-ce/stable
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
EOF
# 安裝Docker
yum install -y docker-ce
# 配置Docker使用systemd作為cgroup driver
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriversystemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
在所有節點上安裝Kubernetes組件(kubeadm、kubelet和kubectl):
# 添加Kubernetes的yum源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
# 安裝Kubernetes組件
yum install -y kubelet kubeadm kubectl
# 設置開機啟動
systemctl enable kubelet
systemctl start kubelet
systemctl enable kubeadm
systemctl start kubeadm
在Master節點上初始化Kubernetes集群:
kubeadm init --apiserver-advertise-address 192.168.1.100 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.21.0 --service-cidr 10.96.0.0/12 --pod-network-cidr 10.244.0.0/16
在Master節點上配置kubectl,以便在命令行中管理集群:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
在Master節點上部署網絡插件(例如Flannel):
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
在Worker節點上運行以下命令,加入集群:
kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
你可以使用自動化腳本來簡化上述步驟。以下是一個簡單的自動化腳本示例:
#!/bin/bash
# 配置主機環境
echo "配置主機環境..."
yum update -y
yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm
# 配置靜態IP
echo "配置靜態IP..."
for node in node1 node2; do
vi /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i 's/BOOTPROTO=dhcp/BOOTPROTO=static/'
sed -i 's/ONBOOT=no/ONBOOT=yes/'
IPADDR=192.168.1.$(echo $((RANDOM % 256)) + 100)
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
echo "IPADDR=$IPADDR" >> /etc/sysconfig/network-scripts/ifcfg-ens33
echo "NETMASK=$NETMASK" >> /etc/sysconfig/network-scripts/ifcfg-ens33
echo "GATEWAY=$GATEWAY" >> /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
done
# 安裝Docker
echo "安裝Docker..."
cat > /etc/yum.repos.d/docker-ce.repo <<EOF
[docker-ce]
name=Docker CE
baseurl=https://download.docker.com/linux/centos/docker-ce/stable
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
EOF
yum install -y docker-ce
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriversystemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
# 安裝Kubernetes組件
echo "安裝Kubernetes組件..."
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
systemctl start kubelet
systemctl enable kubeadm
systemctl start kubeadm
# 初始化Master節點
echo "初始化Master節點..."
kubeadm init --apiserver-advertise-address 192.168.1.100 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.21.0 --service-cidr 10.96.0.0/12 --pod-network-cidr 10.244.0.0/16
# 配置kubectl
echo "配置kubectl..."
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 部署網絡插件
echo "部署網絡插件..."
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 加入Worker節點
echo "加入Worker節點..."
for node in node1 node2; do
kubeadm join 192.168.1.100:6443 --token <token>