在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官方文档和最佳实践。