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
标签: k8s