Kubernetes集群部署与实践

阅读: 评论:0

Kubernetes集群部署与实践

Kubernetes集群部署与实践

本博客链接:

一、提要

部署Kubernetes集群至少需要3台服务器,其中至少要有1个服务器做master节点,至少要有1个服务器做node节点,且节点名称是唯一的。

当集群中只有一个master节点时,如果其出现了故障,会导致Kubernetes的控制平面完全失效。如要保证Kubernetes集群的高可靠性,可以设置多个master,当其中部分master出现故障时,其他master还可以管理整个集群。

因此,我们这里使用三台服务器部署,可以有2种部署方案,2个master+1个node,或者1个master+2个node,这里我们使用后一种方式。

三台服务器:

master,192.168.153.145
node1,192.168.153.146
node2,192.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.f,新增以下内容:

# 主要是为了将桥接的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

编辑/f文件,新增以下内容:

# 3台机器都执行
pool time1.aliyun 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 .repo
yum -y install docker-ce
systemctl start docker
systemctl enable docker
docker -v

创建并编辑/pos.po,新增以下内容:

# 主要是为了添加Kubernetes的源
# 3台机器都执行
[kubernetes]
name=Kubernetes
baseurl=
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=.gpg .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/google_containers/coredns:v1.8.5

创建并编辑/etc/docker/daemon.json,新增以下内容:

# 3台机器都执行
{"exec-opts": [&#updriver=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/google_containers 
--kubernetes-version v1.23.6 
--service-cidr=10.1.0.0/16 
--pod-network-cidr=10.244.0.0/16-----------------------单行用于复制------------------------------
kubeadm init --apiserver-advertise-address=192.168.153.145 --image-repository registry.aliyuncs/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/f' > /etc/profile.d/k8s.sh
source /etc/profile.d/k8s.sh

安装Pod网络插件:

# 只在master机器上执行
# 网上找到l下载下来之后手动安装
kubectl apply -f /l

生成worker节点用来加入集群的校验token:

# 只在master机器上执行
kubeadm token create --print-join-command
kubeadm join 192.168.153.145:6443 --token zqlnxn.b8110o37bp5kwinl --discovery-token-ca-cert-hash sha256:69cf2bd1bf87495d1e2e5dc11b3736151feaf00e38a59ea66b276007a163a0aa 

加入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 

master绑定:

# 在两个node机器上执行
echo "export KUBECONFIG=/etc/f" >> /etc/profile
source /etc/profile

查看节点状态(三台机器均可查看),如下图所示:

至此,如果解决完所有报错,则部署结束。

三、测试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/l
4.6、故障排查

查看Nginx的应用日志:

kubectl logs nginx-85b98978db-kxvn6

输出资源的详细信息:

kubectl describe pod nginx-85b98978db-kxvn6

本文发布于:2024-02-04 14:56:53,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170709842256571.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:集群   Kubernetes
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23