在CentOS上部署和配置Kubernetes(k8s)集群是一个复杂但非常有价值的过程。以下是一些关键的最佳实践,可以帮助你确保集群的稳定性和高效性。
1. 环境准备
- 关闭防火墙:在所有节点上关闭防火墙,以允许Kubernetes组件之间的通信。
systemctl stop firewalld systemctl disable firewalld
- 关闭SELinux:将SELinux设置为permissive模式,以减少对Kubernetes操作的限制。
sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0
- 关闭Swap:禁用Swap分区,以提高系统性能。
swapoff -a sed -i 's/.*swap.etc/fstab swapoff -a' /etc/fstab
- 设置主机名:为每个节点设置唯一的主机名。
hostnamectl set-hostname
- 配置网络:确保所有节点的IP地址设置为静态IP,并在master节点上配置iptables规则。
cat /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 sysctl --system
2. 安装Docker
在所有节点上安装Docker,并确保版本兼容。
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io systemctl start docker systemctl enable docker
3. 安装Kubernetes组件
在master节点上安装kubeadm、kubelet和kubectl。
yum install -y kubeadm kubelet kubectl --nogpgcheck systemctl enable kubelet systemctl start kubelet
4. 初始化Master节点
在master节点上初始化Kubernetes集群。
kubeadm init --apiserver-advertise-address--image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.15 --service-cidr 10.96.0.0/12 --pod-network-cidr 10.244.0.0/16 --ignore-preflight-errors all
5. 配置kubectl
将kubectl配置文件复制到本地,以便在本地管理集群。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
6. 加入Worker节点
在所有worker节点上运行kubeadm join命令,加入集群。
kubeadm join:6443 --token --discovery-token-ca-cert-hash sha256:
7. 部署CNI网络插件
部署Calico或其他CNI网络插件,以支持Pod之间的通信。
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
8. 监控和日志
- 监控集群状态:使用
kubectl get nodes
、kubectl get pods --all-namespaces
等命令监控集群状态。 - 查看事件日志:使用
kubectl get events
查看集群事件日志。 - 检查Pod日志:使用
kubectl logs
查看Pod日志。-c
9. 故障排查
- 审视集群状态:检查节点状态,确保基本组件正常运行。
- 追踪事件日志:通过事件日志了解集群中的重要事件和错误。
- 聚焦Pod状态:检查Pod状态,排查容器或应用程序相关的问题。
- 检查网络连通性:确保服务、Pod和节点之间的网络通信正常。
- 审视存储配置:检查存储卷声明、存储类和持久卷的状态。
- 研究容器日志:深入容器的日志,提供关于应用程序故障的重要线索。
10. 内核参数优化
优化内核参数以提高系统性能和稳定性。
net.ipv4.tcp_keepalive_time 600 net.ipv4.tcp_keepalive_intvl 30 net.ipv4.tcp_keepalive_probes 10 net.ipv6.conf.all.disable_ipv6 1 net.ipv4.neigh.default.gc_stale_time 120 net.ipv4.conf.all.rp_filter 0 net.ipv4.ip_local_port_range 45001 65000 net.ipv4.ip_forward 1 net.ipv4.tcp_max_tw_buckets 6000 net.ipv4.tcp_syncookies 1 net.ipv4.tcp_synack_retries 2 net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.netfilter.nf_conntrack_max 2310720
通过遵循这些最佳实践,你可以确保在CentOS上部署的Kubernetes集群更加稳定、高效和安全。