在CentOS上部署Kubernetes(k8s)应用时,需要考虑多个方面以确保部署的成功和高效性。以下是一个详细的部署策略,包括环境准备、安装Kubernetes组件、网络配置、存储解决方案、安全性配置、监控和日志、备份和恢复、自动化部署以及最佳实践。
关闭防火墙:
sudo systemctl stop firewalld sudo systemctl disable firewalld
关闭SELinux:
sudo setenforce 0 sudo sed -i 's/enforcing/disabled/' /etc/selinux/config
关闭Swap分区:
sudo swapoff -a sudo sed -i 's/.*swap.//' /etc/fstab
设置主机名和hosts文件:
sudo hostnamectl set-hostname <hostname> echo "<IP> <hostname>" >> /etc/hosts
配置静态IP:
编辑 /etc/sysconfig/network-scripts/ifcfg-<interface>
文件,设置 BOOTPROTO=static
并配置 IPADDR
、NETMASK
、GATEWAY
等。
修改内核参数:
编辑 /etc/sysctl.d/k8s.conf
文件,设置以下参数:
net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1
使配置生效:
sudo sysctl -p /etc/sysctl.d/k8s.conf
时间同步:
安装并配置NTP服务:
sudo yum install -y ntpdate sudo ntpdate time.windows.com
添加Docker国内镜像源:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker CE:
sudo yum install -y docker-ce docker-ce-cli containerd.io
启动Docker服务并设置开机启动:
sudo systemctl start docker sudo systemctl enable docker
添加Kubernetes软件仓库:
创建 /etc/yum.repos.d/kubernetes.repo
文件,内容如下:
[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 exclude=kube*
安装kubelet、kubeadm和kubectl:
sudo yum install -y kubelet kubeadm kubectl
配置kubectl:
创建 ~/.kube
目录并复制认证文件:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
在Master节点上运行:
kubeadm init --apiserver-advertise-address <master-ip> --image-repository registry.aliyuncs.com/google_containers --kubernetes-version <version> --service-cidr <service-cidr> --pod-network-cidr <pod-network-cidr>
初始化完成后,会输出一条join命令,用于将其他节点加入集群。
在各个工作节点上执行从Master获取到的join命令。
在Master节点上运行:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
在Master节点上执行:
kubectl get nodes kubectl get pods --all-namespaces
滚动更新:
创建Deployment资源并定义应用程序的期望状态。更新Deployment的镜像版本,检查更新过程,确保新版本的Pod正常运行。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxSurge: 20% maxUnavailable: 1 minReadySeconds: 5 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
回滚更新:
查看Deployment的历史版本:
kubectl rollout history deployment/nginx-deployment
回滚到指定版本:
kubectl rollout undo deployment/nginx-deployment --to-revision <revision-number>
以上是在CentOS上部署Kubernetes应用的基本策略和步骤,具体的配置可能会因不同的业务需求和环境而有所不同。建议在实施之前详细规划,并参考Kubernetes官方文档和最佳实践。