Kubernetes在Linux上的最佳安装实践
swapoff -a临时关闭,编辑/etc/fstab文件注释swap行永久生效。systemctl stop firewalld && systemctl disable firewalld;Ubuntu使用ufw disable。sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0临时生效,重启系统永久禁用。/etc/sysctl.d/k8s.conf文件,添加以下内容并执行sysctl --system生效:net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
Kubernetes依赖容器运行时管理容器,推荐使用containerd(Kubernetes原生支持,性能更优):
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default > /etc/containerd/config.toml
sudo systemctl restart containerd
sudo yum install -y containerd
sudo systemctl enable --now containerd
--exec-opt native.cgroupdriver=systemd(避免与kubelet冲突)。这三个组件是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 gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet=1.29.10-00 kubeadm=1.29.10-00 kubectl=1.29.10-00
sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本
cat <<EOF > /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-1.29.10 kubeadm-1.29.10 kubectl-1.29.10
sudo systemctl enable --now kubelet
使用kubeadm init命令初始化Master节点,指定Pod网络CIDR(避免与本地网络冲突):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU,Mem
/etc/kubernetes/admin.conf复制到当前用户的.kube目录,并设置权限:mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join命令(用于Worker节点加入集群),该命令包含Token和CA证书哈希,有效期为24小时。网络插件是Pod间通信的核心,推荐使用Calico(高性能、支持网络策略):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl get pods -n kube-system(所有插件Pod应为Running状态)。在Worker节点上执行Master节点生成的kubeadm join命令(替换为实际IP、Token和CA哈希):
sudo kubeadm join <Master-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
kubectl get nodes,若Worker节点状态为Ready,则表示加入成功。Dashboard提供Web界面管理集群,安装命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
EOF
kubectl proxy启动代理,然后在浏览器访问http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/。requests)和限制(limits),避免资源抢占;使用Horizontal Pod Autoscaler(HPA)根据负载自动扩缩容Pod。