kubeadm方式部署k8s最新版本V1.26.2

Kubernetes核心概念

Master主要负责资源调度,控制副本,和提供统一访问集群的入口。--核心节点也是管理节点

Node是Kubernetes集群架构中运行Pod的服务节点。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机,由Master管理,并汇报容器状态给Master,同时根据Master要求管理容器生命周期。

Node节点的IP地址,是Kubernetes集群中每个节点的物理网卡的IP地址,是真是存在的物理网络,所有属于这个网络的服务器之间都能通过这个网络直接通信;

Pod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod)。在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理,运行于Node节点上, 若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信。Pod是k8s进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。Pod 就是 k8s 世界里的"应用";而一个应用,可以由多个容器组成。

pause容器每个Pod中都有一个pause容器,pause容器做为Pod的网络接入点,Pod中其他的容器会使用容器映射模式启动并接入到这个pause容器。

Pod Volume,数据卷,挂载宿主机文件、目录或者外部存储到Pod中,为应用服务提供存储,也可以解决Pod中容器之间共享数据。

kubeadm方式部署k8s最新版本V1.26.2_第1张图片

配置一下本地解析

vim  /etc/hosts

kubeadm方式部署k8s最新版本V1.26.2_第2张图片 

安装docker应用

每个节点都需要下载

yum install -y yum-utils device-mapper-persistent-data lvm2 git

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce -y

如果使用的挂载磁盘则需要更改docker的数据目录

如果是启动过的docker则需要停止docker服务 然后把  /var/lib/docker/目录下的数据移动到新的目录   mv  /var/lib/docker/  /data/docker/

修改docker默认数据存储目录配置,在/etc/docker/daemon.json文件添加 以下内容,若是没有/etc/docker/daemon.json文件,则新建该文件

vim /etc/docker/daemon.json

{

 "data-root": "/data/docker"

}

systemctl start docker   启动

systemctl enable docker  设置开机自启

关闭swap分区

Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。方法一,通过kubelet的启动参数–fail-swap-on=false更改这个限制。方法二,关闭系统的Swap。

每个节点都需要关闭

swapoff -a

vim /etc/fstab  注释掉SWAP的自动挂载

kubeadm方式部署k8s最新版本V1.26.2_第3张图片

使用free -m确认swap已经关闭。

kubeadm方式部署k8s最新版本V1.26.2_第4张图片 

拉取docker镜像

初始化的时候,它会自动拉取镜像但是自动拉取用的是k8s官网的源地址容易失败所以手动拉取aliyun的镜像注意拉取的docker镜像的版本必须要和kubelet、kubectl的版本保持一致。在下面初始化时直接指定阿里云的镜像

vim dockerpull.sh

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.26.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.26.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.26.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.26.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.9.3

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.6-0

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9

bash dockerpull.sh  执行脚本拉取镜像

docker images   看下镜像是否都拉取成功

kubeadm方式部署k8s最新版本V1.26.2_第5张图片

cri-dockerd安装

注意部署最新版本1.26.2  默认不在是使用docker容器所以需要下载一个插件

所有节点都需要下载

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm

rpm -ivh  cri-dockerd-0.3.1-3.el7.x86_64.rpm

修改/usr/lib/systemd/system/cri-docker.service文件中ExecStart配置kubelet使用pause镜像

vim /usr/lib/systemd/system/cri-docker.service

ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

systemctl daemon-reload

systemctl enable --now cri-docker

加载ipvs相关内核模块

vim mod.sh

#!/bin/bash

modprobe ip_vs

modprobe ip_vs_rr

modprobe ip_vs_wrr

modprobe ip_vs_sh

modprobe nf_conntrack_ipv4

modprobe br_netfilter

chmod +x mod.sh

bash   mod.sh

scp mod.sh  k8s-node1:/root/   发送后记得执行一下

scp mod.sh  k8s-node2:/root/ 发送后记得执行一下

vim /etc/rc.local   如果重新开机,需要重新加载(所以写在 /etc/rc.local 中开机自动加载)

kubeadm方式部署k8s最新版本V1.26.2_第6张图片

chmod +x /etc/rc.local

配置转发相关参数,否则可能会出错

cat <  /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

vm.swappiness=0

EOF

sysctl --system   使配置生效

lsmod | grep ip_vs 查看是否加载成功

kubeadm方式部署k8s最新版本V1.26.2_第7张图片

安装kubeadm和kubelet:

所有节点都需要安装

配置阿里云的yum源

cat < /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

 scp /etc/yum.repos.d/kubernetes.repo   k8s-node1:/etc/yum.repos.d/kubernetes.repo

 scp /etc/yum.repos.d/kubernetes.repo   k8s-node2:/etc/yum.repos.d/kubernetes.repo

安装

yum makecache fast -y

yum install -y kubelet kubeadm kubectl ipvsadm  #注意,这样默认是下载最新版本

如果想下载旧版本,后面要跟上指定的版本号

yum install -y kubelet-1.22.2-0.x86_64 kubeadm-1.22.2-0.x86_64 kubectl-1.22.2-0.x86_64 ipvsadm  

启动kubelet

systemctl daemon-reload

systemctl enable kubelet && systemctl restart kubelet

systemctl status kubelet查看一下状态你会发现报错误信息;(每个节点都会报错),不用管master节点初始化之后就好了。

kubeadm方式部署k8s最新版本V1.26.2_第8张图片

配置master节点初始化

kubeadm init --help可以查看命令的具体参数用法

在master节点执行初始化(node节点不用执行)

参数详情:

apiserver-advertise-address  指定apiserver的IP,即master节点的IP

image-repository  设置镜像仓库为国内的阿里云镜像仓库

kubernetes-version  设置k8s的版本,跟步骤三的kubeadm版本一致

service-cidr  这是设置node节点的网络的,暂时这样设置

pod-network-cidr  这是设置node节点的网络的,暂时这样设置

cri-socket  设置cri使用cri-dockerd

kubeadm init --apiserver-advertise-address=192.168.197.136 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.26.2 --service-cidr=10.168.0.0/12 --pod-network-cidr=10.244.0.0/16 --cri-socket unix:///var/run/cri-dockerd.sock  --ignore-preflight-errors=all

执行完初始化的命令 查看一下回显是否成功

echo $?

kubeadm方式部署k8s最新版本V1.26.2_第9张图片

初始化完成后根据提示的命令操作即可

 mkdir -p $HOME/.kube

 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

 sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果使用的root用户可以操作这条命令

export KUBECONFIG=/etc/kubernetes/admin.conf

kubectl get nodes   操作完以上步骤查看一下node节点已经可以看到master了

配置flannel网络插件

完成master节点的时候k8s已经叫我们去配置pod网络了。在k8s系统上Pod网络的实现需要依赖于第三方插件进行种类有很多我们这里使用的flannel。

cd ~ && mkdir flannel && cd flannel

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

vim kube-flannel.yml   查看一下镜像版本

 

拉取要用到的镜像所有节点都要拉取

docker pull docker.io/flannel/flannel:v0.21.2

docker pull docker.io/flannel/flannel-cni-plugin:v1.1.2

kubectl apply -f kube-flannel.yml     运行

查看一下master节点的状态

从NoReady  变成了 Ready 那么我们的flannel就部署好了

Node节点加入集群操作命令

Node1 节点操作

kubeadm join 192.168.197.136:6443 --token 8isrry.zd97vxqtsg7vw2dx \

        --discovery-token-ca-cert-hash sha256:e2efbe684211b437d40c03a2e512f31982716caa38b51c7f88f1516c166de76e  --cri-socket unix:///var/run/cri-dockerd.sock

加入node1节点时报错,发现是忘记修改主机名导致的(开始修改过主机名没有这个报错)

所有机器修改一下主机名

 hostnamectl set-hostname k8s-master

 hostnamectl set-hostname k8s-node1

 hostnamectl set-hostname k8s-node2

然后node1节点要删除刚刚生成的证书重新执行加入集群的命名

rm -rf  /etc/kubernetes/pki/ca.crt

Node所有节点操作

kubeadm join 192.168.197.136:6443 --token 8isrry.zd97vxqtsg7vw2dx \

        --discovery-token-ca-cert-hash sha256:e2efbe684211b437d40c03a2e512f31982716caa38b51c7f88f1516c166de76e  --cri-socket unix:///var/run/cri-dockerd.sock

然后来到master节点查看一下node信息

kubectl get nodes

kubeadm方式部署k8s最新版本V1.26.2_第10张图片

kubectl get pods --namespace kube-flannel    看下flannel运行状态

kubeadm方式部署k8s最新版本V1.26.2_第11张图片 

Node两个节点也已经加入成功

kubeadm方式部署k8s最新版本V1.26.2_第12张图片

 

删除node节点操作

kubectl delete nodes node节点名称

添加已删除node节点操作

1.停止被删除node节点的kubectl systemctl stop kubelet

2.删除相关文件  rm -rf /etc/kubernetes/*

3.添加节点 注意token未失效(token有效期24小时)才能这样操作 kubeadm join 192.168.197.136:6443 --token 8isrry.zd97vxqtsg7vw2dx         --discovery-token-ca-cert-hash sha256:e2efbe684211b437d40c03a2e512f31982716caa38b51c7f88f1516c166de76e  --cri-socket unix:///var/run/cri-dockerd.sock   

 

Token过期后有新的节点加入操作

kubeadm token create --print-join-command Token重新生成的命令

重新生成的token加上 --cri-socket unix:///var/run/cri-dockerd.sock  参数在新节点执行即可

 

 

 

 

 

 

 

 

 

 

 

 

服务器准备:

192.168.197.136  (k8s-master)

192.168.197.137 (k8s-node1)

192.168.197.138 (k8s-node2)

主机名修改

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

hostnamectl set-hostname k8s-node2

关闭防火墙和selinux  

systemctl stop firewalld && systemctl disable firewalld

setenforce 0

vim /etc/selinux/config

你可能感兴趣的:(kubernetes,docker,容器,运维,k8s)