Kubernetes集群部署与实践
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、提要
部署Kubernetes集群至少需要3台服务器其中至少要有1个服务器做master节点至少要有1个服务器做node节点且节点名称是唯一的。
当集群中只有一个master节点时如果其出现了故障会导致Kubernetes的控制平面完全失效。如要保证Kubernetes集群的高可靠性可以设置多个master当其中部分master出现故障时其他master还可以管理整个集群。
因此我们这里使用三台服务器部署可以有2种部署方案2个master+1个node或者1个master+2个node这里我们使用后一种方式。
三台服务器
master192.168.153.145
node1192.168.153.146
node2192.168.153.147
二、部署
修改主机名
# master机器执行命令
hostnamectl set-hostname master
# node1机器执行命令
hostnamectl set-hostname node1
# node2机器执行命令
hostnamectl set-hostname node2
关闭防火墙
# 3台机器都执行
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
# 3台机器都执行
sed -i 's/enforcing/disabled/' /etc/selinux/config
关闭swap分区
# 3台机器都执行
vim /etc/fstab
注释掉该行/dev/mapper/centos-swap
编辑/etc/hosts文件新增以下内容
# 3台机器都执行
192.168.153.145 master master
192.168.153.146 node1 node1
192.168.153.147 node2 node2
创建并编辑/etc/sysctl.d/k8s.conf新增以下内容
# 主要是为了将桥接的IPv4流量传递到iptables
# 只在master机器上执行
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
执行命令
# 只在master机器上执行
sysctl --system
配置时间同步
# 3台机器都执行
yum -y install chrony
编辑/etc/chrony.conf文件新增以下内容
# 3台机器都执行
pool time1.aliyun.com iburst
执行命令
# 3台机器都执行
systemctl enable --now chronyd
免密认证
# 只在master机器上执行
ssh-keygen -t rsa
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
重启机器
# 3台机器都执行
reboot
安装docker
# 3台机器都执行
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker
systemctl enable docker
docker -v
创建并编辑/etc/yum.repos.d/kubernetes.repo新增以下内容
# 主要是为了添加Kubernetes的源
# 3台机器都执行
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安装kubeadm、kubelet、kubectl
注1.24以上版本已经放弃docker如果安装k8s在初始化时会报错
# 3台机器都执行
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet
执行命令
# 只在master机器上执行
docker pull coredns/coredns:1.8.5
docker tag coredns/coredns:1.8.5 registry.aliyuncs.com/google_containers/coredns:v1.8.5
创建并编辑/etc/docker/daemon.json新增以下内容
# 3台机器都执行
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
执行命令
# 3台机器都执行
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
部署Kubernetes master节点
# 只在master机器上执行
kubeadm init \
--apiserver-advertise-address=192.168.153.145 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
如有问题通过百度解决漫长等待后记录下以下值
kubeadm join 192.168.153.145:6443 --token zqlnxn.b8110o37bp5kwinl \
--discovery-token-ca-cert-hash sha256:69cf2bd1bf87495d1e2e5dc11b3736151feaf00e38a59ea66b276007a163a0aa
如下图所示
执行命令
# 只在master机器上执行
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' > /etc/profile.d/k8s.sh
source /etc/profile.d/k8s.sh
安装Pod网络插件
# 只在master机器上执行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 或者下载下来之后手动安装
kubectl apply -f /root/kube-flannel.yml
加入Kubernetes的Node节点
# 在两个node机器上执行
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
kubeadm join 192.168.153.145:6443 --token zqlnxn.b8110o37bp5kwinl --discovery-token-ca-cert-hash sha256:69cf2bd1bf87495d1e2e5dc11b3736151feaf00e38a59ea66b276007a163a0aa
查看节点状态如下图所示
至此如果解决完所有报错则部署结束。
三、测试Kubernetes集群
执行命令
# 只在master机器上执行
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
如图所示
浏览器访问
四、Kubernetes实践
以下只在master机器上执行
4.1、Deployment资源部署
集群上运行Nginx镜像
kubectl run nginx --image=nginx
查看部署的Nginx应用
kubectl get deployments.apps nginx
查看Nginx部署的详细信息及过程
kubectl describe deploy nginx
查看Nginx的ReplicaSet资源
# DESIRED-副本数期望值CURRENT-当前副本数READY-就绪状态的副本数AGE-已启动时间
kubectl get rs
查看Nginx的Pod资源
kubectl get pod -o wide
4.2、Deployment日志查看
查看Nginx的应用日志
kubectl logs nginx-85b98978db-kxvn6
4.3、Deployment资源执行
通过kubectl进入Nginx应用对应的容器
kubectl exec -it nginx-85b98978db-kxvn6 bash
查看Service和Pod的映射关系
kubectl get endpoints
4.4、Deployment资源扩展
扩展Nginx应用的副本数为3原来是1
kubectl scale deployment nginx --replicas=3
扩展后查看Nginx应用的Deployment、ReplicaSet、Pod、Endpoints资源
kubectl get deployment.apps nginx
kubectl get rs
kubectl get pod
kubectl get ep
4.5、资源删除
删除对应的Deployment资源通过kubectl run启动的
kubectl rollout undo deploy nginx
检验删除结果
kubectl get pod
删除对应的Service资源通过kubectl apply启动的
kubectl delete -f /tmp/nginx.svc.yml
4.6、故障排查
查看Nginx的应用日志
kubectl logs nginx-85b98978db-kxvn6
输出资源的详细信息
kubectl describe pod nginx-85b98978db-kxvn6
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |