如何在Linux服务器安装Kubernetes
/etc/hosts配置)。sudo swapoff -a临时关闭,编辑/etc/fstab注释掉swap行永久生效。sudo ufw disable;CentOS执行sudo systemctl stop firewalld && sudo systemctl disable firewalld。sudo sed -i 's/enforcing/disabled/g' /etc/selinux/config并重启系统。容器运行时是Kubernetes管理容器的基础,推荐使用Containerd(原生支持Kubernetes)。
sudo apt update && sudo apt install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml # 生成默认配置
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml # 启用Systemd cgroup(Kubernetes要求)
sudo systemctl restart containerd && sudo systemctl enable containerd
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y containerd.io
sudo systemctl enable containerd && sudo systemctl start containerd
注:若使用Docker,可通过
sudo apt install -y docker.io(Ubuntu)或sudo yum install -y docker(CentOS)安装,但Containerd性能更优且更轻量。
这三个组件是Kubernetes集群的核心:
sudo apt update && sudo apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 防止自动升级(避免版本冲突)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet && sudo systemctl start kubelet
注:
kubeadm用于初始化集群,kubelet运行在每个节点上,kubectl用于管理集群。
在Master节点上执行以下命令,初始化Kubernetes控制平面:
sudo kubeadm init \
--apiserver-advertise-address=<Master节点IP> \ # 替换为Master节点实际IP
--pod-network-cidr=10.244.0.0/16 \ # 指定Pod网络CIDR(需与后续网络插件匹配)
--image-repository registry.aliyuncs.com/google_containers # 使用国内镜像加速(可选)
kubeadm join命令(包含token和CA证书哈希),需保存备用(用于Worker节点加入集群)。mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行kubectl get nodes,此时Master节点状态应为NotReady(需等待网络插件安装)。Kubernetes需要网络插件实现Pod间通信,常用Flannel(轻量、易部署):
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
安装完成后,执行kubectl get pods -n kube-system,等待所有网络插件Pod状态变为Running(通常需要1-2分钟)。
在Worker节点上执行Master节点生成的kubeadm join命令(替换其中的<Master_IP>、<token>和<sha256_hash>):
sudo kubeadm join <Master_IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
若忘记命令,可在Master节点重新生成:
kubeadm token create --print-join-command
执行后,Worker节点会自动加入集群,回到Master节点执行kubectl get nodes,若Worker节点状态变为Ready,则说明集群搭建成功。
kubectl get nodes(所有节点应为Ready)。kubectl get pods --all-namespaces(核心组件如kube-apiserver、kube-controller-manager等应为Running)。kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx # 查看NodePort端口(如30080)
在浏览器访问<Master_IP>:<NodePort>,若看到Nginx欢迎页面,则说明集群正常运行。kubeadm config images list查看所需镜像)。