Ubuntu18.04 安装kubernetes v1.25.x 集群

环境介绍

Vmware虚拟机挂载两个Ubuntu18.04虚拟镜像,相互之间可以Ping通。
安装的K8s版本为v1.25.x 底层容器接口为docker加cri组件(Kubernetes v1.23以后便不再支持docker,转而支持更底层的containerd,此时需要cri组件来支持docker,docker相当于是对containerd进行了一层封装)。

master节点 192.168.74.140
node节点 192.168.74.139

环境配置

查看并设置主机名,解析需要连入集群的主机

主机名最终会在集群中作为Node节点或者Master节点的名字被显示,所以注意不要同名
查看主机名:

hostname $hostname

更改主机名称(把 k8s-master 换成你想要的名字):

sudo hostnamectl set-hostname k8s-master

解析主机:

sudo gedit /etc/hosts

写入以下内容(注意IP地址和主机名换成自己的):

192.168.74.140 k8s-master
192.168.74.139 k8s-node1

关闭swap

sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab

查看是否关闭

free -h

在这里插入图片描述

开启防火墙的端口

这一步主要是为了放置kubeadm init的时侯报错,很多教程是直接关闭防火墙。

sudo ufw allow 6443

查看防火墙状态

sudo ufw status

以防万一,这里给出关闭防火墙的命令,但是此处不要执行!

sudo ufw disable
sudo ufw status

操作防火墙以后,重启电脑(虚拟机)

重启后注意查看swap状态

free -m

如果swap没关,运行:

sudo swapoff -a

开启IPv4转发

sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

设置时间同步

sudo dpkg-reconfigure tzdata

选择 Asia ShangHai

安装Docker

Docker 可以安装 docker.io 或者 docker.ce 。docker.io是由Debian维护的docker版本,docker.ce是由Docker官方维护的社区版,如果是Ubuntu系统,推荐安装io版本

sudo apt-get update
sudo apt-get -y install docker.io

修改docker启动项:

sudo mkdir /etc/docker
sudo gedit /etc/docker/daemon.json

复制以下内容进去:

{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}

保存退出,更新设置

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

查看docker版本

sudo docker version

查看docker状态

sudo systemctl status docker

在这里插入图片描述

查看docker信息(主要是查看Cgroup驱动,查看完整信息便不用加 | grep Cgroup)

sudo docker info | grep Cgroup

在这里插入图片描述

安装 cri-dockerd 组件

一般来说下载最新的就行:
进入以下网址,下载cri组件(版本看自己选择),这里选择0.26
https://github.com/Mirantis/cri-dockerd/releases
找到想要的版本,点进去,找到对印的安装包下载,Ubuntu应该下载deb包,CentOS是rpm包。
在这里插入图片描述

同时,还要注意版本代号,Ubuntu18.04代号是Bionic,22.04.1是jammy。
当然也可以下载源码,自己编译安装
将文件下载到本地以后,在cri包的路径下新建一个终端,执行安装命令:
注意包名!! 一般输入到cri三个字母以后使用TAB键补全即可。

sudo dpkg -i cri-dockerd_0.2.6.3-0.ubuntu-bionic_amd64.deb 

调整启动参数,注意此处,后续报错可能会回来改

sudo sed -i -e 's#ExecStart=.*#ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8#g' /lib/systemd/system/cri-docker.service

设置开机自启动

sudo systemctl daemon-reload
sudo systemctl enable cri-docker

查看cri-docker状态:

sudo systemctl status cri-docker

安装Kubernetes

安装依赖:

sudo apt-get install -y apt-transport-https ca-certificates curl

安装GPG密匙

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg  https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg

sudo echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

更新软件源

sudo apt-get update

查看Kubernetes可用版本,因为三个组件的版本都是一样的,所以只需要查看其中一个就可以

apt-cache madison kubeadm

注意:如果Ubuntu使用不同的软件源,对软件版本的命名会有所不同,aliyun的源在结尾会有 -00
下载对应版本的kubernetes组件,这里下载1.25.0-00, 有需要可以更换其他版本

sudo apt-get install -y kubelet=1.25.0-00 kubeadm=1.25.0-00 kubectl=1.25.0-00

标记软件包,防止自动更新:

sudo apt-mark hold kubelet kubeadm kubectl

配置kubelet,该操作主要是针对利用docker作为kubernetes的容器,如果使用Containerd则不需要配置。当然,使用docker也可以不配置,但是,需要在kubeadm命令上使用“–cri-socket unix:///run/cri-dockerd.sock”选项

sudo mkdir /etc/sysconfig
sudo gedit /etc/sysconfig/kubelet

复制以下内容,保存退出

KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/cri-dockerd.sock

启动kubelet

sudo systemctl enable --now kubelet 

以上内容是所有节点都要执行的,下面的操作步骤会分master节点和Node节点

master节点初始化

查看初始化需要的镜像

sudo kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

拉取镜像

sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --cri-socket unix:///run/cri-dockerd.sock

初始化节点,注意这里的ip地址要换成你的master节点的ip地址,k8s的版本也要换成你下载的版本(此处不要加-00,尽管你下载的包名带-00)
切换到root模式再执行(centos 的命令是 sudo root):

sudo su
kubeadm init --control-plane-endpoint=192.168.74.140 --kubernetes-version=v1.25.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock --upload-certs --image-repository registry.aliyuncs.com/google_containers

此时出现如下界面就配置好了:
在这里插入图片描述
记住kubeadm join那条指令,后续用于node节点加入集群。

配置环境变量:还是在su环境下:

export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

切换回普通模式(username是你的机器名字,绿字@前面的字母,不会的话就重起一个终端)
在这里插入图片描述

su username

设置配置文件备份

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

master 节点,安装网络插件

这里用flannel,也可以用Calico

wget https://github.com/flannel-io/flannel/releases/download/v0.20.1/flanneld-amd64
mkdir /opt/bin
cp flanneld-amd64 /opt/bin/flanneld
chmod +x /opt/bin/flanneld

继续执行

sudo kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

等待一会,查看状态(root模式执行)结果应该会变成ready

kubectl get nodes

Node节点,加入集群

wget https://github.com/flannel-io/flannel/releases/download/v0.20.1/flanneld-amd64
mkdir /opt/bin
cp flanneld-amd64 /opt/bin/flanneld
chmod +x /opt/bin/flanneld

加入节点,利用刚才保存的命令:(末尾加上–cri-socket unix:///run/cri-dockerd.sock)

kubeadm join 192.168.74.140:6443 --token vgsks2.7h1fivdvo0ax726m \
	--discovery-token-ca-cert-hash sha256:f986c855e2beb7026feebfd94373da79b0a73e7ad52c2aa0a2c57d011ac31890 --cri-socket unix:///run/cri-dockerd.sock

不出问题的话,主节点在root下执行

kubectl get nodes

就可以查看到Node状态了

扩展内容1

使用containerd代替 docker 和 cri 那一步

查看K8s和containerd的匹配关系https://containerd.io/releases/
最好别用apt安装,apt的版本太低
安装containerd,注意链接中的ubuntu对应的版本名称,18.04是bionic,22.04.1是jammy(最好是自己打开这个网址,找到路径以后再复制过来,或者下载好了以后再弄进来)

curl -# -O  https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/bionic/pool/stable/amd64/containerd.io_1.6.9-1_amd64.deb

sudo dpkg -i containerd.io_1.6.9-1_amd64.deb

导出默认配置文件

sudo containerd config default > /etc/containerd/config.toml

编辑配置:

sudo gedit /etc/containerd/config.toml

修改sandbox_image行替换为aliyun的pause镜像

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"

增加:

[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"

配置 systemd cgroup 驱动 (修改,不是增加)

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

配置镜像加速:

[plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins. "io.contianerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry.aliyuncs.com"]

启动服务:

sudo systemctl enable containerd
sudo systemctl restart containerd

扩展内容2

kubeadm init 报错排错1:

运行以下命令,定位错误:

journalctl -xeu kubelet | grep Failed

查看报错原因,一般会有几条错误,先看第一条,翻到最上面,如果是6443之类的端口拒绝访问,那说明是防火墙的问题,这种问题一般是之前只是单纯的禁用了防火墙。单纯的禁用防火墙是没用的。在这里插入图片描述
开启防火墙:

sudo ufw enable

查看防火墙状态:

sudo ufw status

启用6443端口

sudo ufw allow 6443

重启虚拟机

此时执行以下命令重置kubeadm(root模式执行)

kubeadm reset --cri-socket unix:///run/cri-dockerd.sock && rm -rf /etc/kubernetes/ /var/lib/kubelet /var/lib/dockershim /var/run/kubernetes /var/lib/cni /etc/cni/net.d

再次执行kubeadm init(root模式,如果报错yaml文件存在,再此执行上面的reset命令,注意替换IP地址和K8s版本)

kubeadm init --control-plane-endpoint=192.168.74.140 --kubernetes-version=v1.25.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock --upload-certs --image-repository registry.aliyuncs.com/google_containers

kubeadm init 报错排错2:

Failed to create pod sandbox:…
参考这里

扩展内容2

删除node节点

都在root模式下运行
查看节点:

kubectl get node

驱逐pod(node_name 换成要驱逐的node名字)

kubectl drain node_name --delete-local-data --force --ignore-daemonsets

删除节点

 kubectl delete nodes node_name

node节点root执行

kubeadm reset --cri-socket unix:///run/cri-dockerd.sock

扩展内容3

token过期怎么办

全在root模式下执行:
查看当前的token列表

kubeadm token list

重新生成新的token

kubeadm token create

再次查看当前的token列表

kubeadm token list

获取ca证书sha256编码hash值

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

节点加入集群别忘了(–cri-socket unix:///run/cri-dockerd.sock)

kubeadm join 39.96.46.96:6443 --token 369tcl.oe4punpoj9gaijh7 --discovery-token-ca-cert-hash sha256:7ae10591aa593c2c36fb965d58964a84561e9ccd416ffe7432550a0d0b7e4f90 --cri-socket unix:///run/cri-dockerd.sock

扩展内容4

卸载K8s

卸载containerd

sudo apt-get purge   --auto-remove containerd.io

reset集群

sudo su
kubeadm reset -f

卸载k8s

sudo apt-get purge   --auto-remove kubernetes-cni
sudo apt-get purge --auto-remove kubeadm
sudo apt-get purge --auto-remove kubectl
sudo apt-get purge --auto-remove kubelet

删除文件

sudo su
modprobe -r ipip
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
apt clean all
apt remove kube*

利用dpkg命令查看是否还有k8s其他服务

dpkg -l | grep kube

如果有,则执行以下命令删除,替换kube_name成软件名字

sudo apt-get purge   --auto-remove kuber_name
find / -name kube* -delete
find / -name kube* | xargs rm -rf
find / -name kube* | xargs rmdir

重启

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值