ubuntu22安装k8s-1.24.17

安装k8s集群

1 IP地址分配

⚠️ 注意:此处的集群环境

序号IP地址主机名称节点备注
1192.168.2.160mastermaster管理节点
2192.168.2.161node1worker工作节点、可升级为管理节点
3192.168.2.162node2worker工作节点、可升级为管理节点
4192.168.2.163node3worker数据节点、可升级为管理节点

⚠️ 注意:docker版本:20.10.24,为了兼容k8s版本,此版本自带docker compose

2 安装docker

2.1 配置基础环境

# (1)更新安装包
sudo apt update
 
# (2)配置内存
# 临时关闭虚拟内存
sudo swapoff -a
 
# 永久关闭虚拟内存
sudo vim /etc/fstab
# 注释掉下面一行即可
# /swap.img                                 none            swap    sw              0       0
 
# (3)关闭防火墙
# 查看防火墙状态
systemctl status ufw
# 关闭防火墙
systemctl stop ufw
# 禁用防火墙
sudo ufw disable

# (4)下面是开通root账号
# 设置root用户密码,密码是:123456
sudo passwd root

# 启用root用户
sudo passwd -u root

# (5) 配置SSH
# 启用root用户
sudo passwd -u root

# 更改配置文件
sudo vim /etc/ssh/sshd_config

# 将sshd_config的33行,允许以root身份登录,修改如下
PermitRootLogin yes

# 重启ssh服务
sudo service ssh restart

2.2 安装docker

# 更新安装包
sudo apt update

# 添加Docker官方GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
 
# 添加docker源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# 查看docker稳定版列表,可省略
apt-cache madison docker-ce

# 安装docker,可以不指定版本号,默认安装最新版本
sudo apt-get install docker-ce=5:20.10.24~3-0~ubuntu-jammy docker-ce-cli=5:20.10.24~3-0~ubuntu-jammy

# 设置开机启动
systemctl enable docker

安装docker-compose

#  注意docker和docker-cmopose有版本对应关系
# 我用的是v2.12.2
https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64

# 下载完成后,安装到系统中
# 将文件docker-compose-Linux-x86_64移动到/usr/local/bin/目录下,并重命名为docker-compose
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

# 设置执行权限
sudo chmod +x /usr/local/bin/docker-compose

阿里云镜像加速

# 创建目录
sudo mkdir -p /etc/docker

# 创建文件
sudo touch daemon.json

# 编辑文件
sudo vim daemon.json

# 向文件中添加内容
{
  "registry-mirrors": ["https://wh5ewvnk.mirror.aliyuncs.com"]
}


# 生效配置
sudo systemctl daemon-reload

# 重启docker
sudo systemctl restart docker

3 安装k8s

⚠️ k8s版本选择:1.24.17-00

⚠️ 选择高版本,Kubernetes 1.24 版本前,k8s使用Dockershim组件实现K8s与Docker运行时( Docker Runtime Interface ,DRI)通信。随着 Dockershim 的弃用,Kubernetes推荐使用Containerd容器运行时,不使用Docker上层,直接管理容器的生命周期底层功能,包括容器的创建、启动、停止和删除等。

3.1 安装基础环境(全部节点)

# 配置安装环境
sudo apt-get update && sudo apt-get install -y apt-transport-https
 
# 添加安装密钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
 
# 添加k8s镜像源
# 进入/etc/apt/sources.list.d目录下
cd /etc/apt/sources.list.d

# 创建kubernetes.list文件
sudo touch kubernetes.list

# 编辑kubernetes.list
sudo vim kubernetes.list

# 在kubernetes.list文件中添加地址如下
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
 
# 更新安装包
sudo apt-get update

3.2 安装containerd(全部节点)

安装基础

# 安装依赖
sudo apt-get install -y apt-transport-https ca-certificates curl

# 安装containerd
sudo apt-get -y install containerd
sudo systemctl enable containerd
sudo systemctl start containerd

# 查看状态
systemctl status containerd

创建配置

# 创建目录和配置文件,默认存在,可以不执行
sudo mkdir /etc/containerd
sudo touch /etc/containerd/config.toml

# 生成配置文件
sudo containerd config default > config.toml

# 将文件复制到/etc/containerd,覆盖原有config.toml的文件
sudo mv config.toml /etc/containerd/

# 修改配置config.toml,内容参见下文
sudo vim /etc/containerd/config.toml

# 重启containerd
sudo systemctl restart containerd

配置的内容

# 1 修改SystemdCgroup参数为true,默认为false,在文件的137行
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
	……
	# 修改的参数
	SystemdCgroup = true


# 2 修改sandbox_image参数,值一定要与下文“kubeadm config images list --kubernetes-version=v1.24.17 --image-repository=registry.aliyuncs.com/google_containers”命令输出的pause版本和tag保持一致,否则Node节点的Pod一直 CrashLoopBackOff,并且查询 kubectl logs 时也没有任何错误,此处我的版本为阿里云3.7

# 默认参数
# sandbox_image = "registry.k8s.io/pause:3.8"
# 修改的参数
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

3.3 安装k8s(全部节点)

安装基础依赖

# 查看k8s版本号
apt-cache madison kubelet

# 安装k8s
sudo apt-get install kubelet=1.24.17-00 kubeadm=1.24.17-00 kubectl=1.24.17-00
 
# 设置开机启动
systemctl enable kubelet
 
# 查看k8s版本
kubectl version --short
 
# 查看kubelet状态
# Active: active (running)是启动状态
systemctl status kubelet
 
# 停止kubelet
systemctl stop kubelet
 
# 启动kubelet
systemctl start kubelet

配置容器的endpoint

# 使运行时生效
sudo crictl config runtime-endpoint unix:///run/containerd/containerd.sock
sudo crictl config image-endpoint unix:///run/containerd/containerd.sock
# 重启服务
sudo systemctl restart containerd

3.4 初始化master节点

查看镜像列表

# 查看需要的镜像
kubeadm config images list --kubernetes-version=v1.24.17 --image-repository=registry.aliyuncs.com/google_containers

初始化master节点

⚠️ 注意IP地址变化

# 注意,如果用虚拟机,内核数量必须要2个及以上。
# --image-repository				镜像加速,指定初始化下载的镜像。
# --apiserver-advertise-address		直接使用当前master主机地址
# --kubernetes-version				k8s版本,可以不指定,缺省情况会用最新的
# --service-cidr					service网络地址(建议使用10.96.0.0/12,也可以不设置),不可与主机,pod网络地址重复
# --pod-network-cidr 				pod网络地址(建议使用10.244.0.0/16),不可与主机,service网络地址重复,与后面的flannel相关
# --v								日志等级,5级以上会打印更详细的日志,--v=6开启详细日志打印
 
sudo kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.2.160 \
--kubernetes-version=v1.24.17 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--v=6

初始化成功

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.2.160:6443 --token s5gumt.fsd9clxhin5odbhn \
        --discovery-token-ca-cert-hash sha256:0de06dce3e0792c8025a05bccef5f52b8dea3768f8eecf21dc483edfc4e67788

配置master节点

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

配置node节点

# 将节点添加到集群中
sudo kubeadm join 192.168.108.160:6443 --token s5gumt.fsd9clxhin5odbhn \
        --discovery-token-ca-cert-hash sha256:0de06dce3e0792c8025a05bccef5f52b8dea3768f8eecf21dc483edfc4e67788 

管理token

# 查看token
kubeadm token list
 
# 创建token
kubeadm token create
 
# 查看discovery-token-ca-cert-hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

3.5 安装flannel(master节点)

⚠️ 注意:在安装flannel前“kube-system coredns”是“Pending”状态。

在线安装很难成功,根据需要使用别的办法。

# 下载配置文件,可以用最新版本
wget https://github.com/flannel-io/flannel/releases/download/v0.25.5/kube-flannel.yml

# 查看flannel中的镜像
cat kube-flannel.yml |grep image|uniq

# 安装flannel
kubectl apply -f kube-flannel.yml

3.6 管理节点

# 设置节点角色
kubectl label node node1 kubernetes.io/role=worker
kubectl label node node2 kubernetes.io/role=worker
kubectl label node node3 kubernetes.io/role=worker

# 在master节点上查看集群结点
kubectl get nodes

# 删除节点
# 删除节点后,需要在相应的子节点
sudo kubectl delete nodes node1
 
# 重置主机点,慎重操作!!
# 手动删除配置文件
sudo rm -rf  /etc/kubernetes/pki/ca.crt
sudo rm -rf  /etc/kubernetes/kubelet.conf
sudo rm -rf  $HOME/.kube
 
# 重置子节点
sudo kubeadm reset
# 重新加载配置文件
systemctl daemon-reload
 
# 重置子节点,使用以下命令即可
sudo kubeadm reset

3.7 简单管理pod

# 查看Pod
# -A: 显示所有Pod
kubectl get pod
# 查看全部空间下的pod
kubectl get pod --all-namespaces -o wide
 
# 查看Pod的更多概要信息
# -o json: 表示以json方式查看Pod详细信息
# -o yaml: 表示以yaml方式查看Pod详细信息
kubectl get pod -o wide

4 问题

⚠️ 生产环境操作,一定要慎重!!!

# 查看最后100行日志
journalctl -u kubelet.service -n 100

问题1:err="unable to load client CA file /etc/kubernetes/pki/ca.crt: open /etc/kubernetes/pki/ca.crt: no such file or directory"
# 进入目录
cd /etc/kubernetes/pki/
# 生成ca.crt
openssl req -x509 -new -nodes -key ca.key -subj "/CN=ca" -days 10000 -out ca.crt

问题2:err="failed to run Kubelet: unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory"
更新证书时会出现问题2,例如:下面命令也会出现问题2
# # 更新证书
# 不用执行下面命令
# kubeadm certs renew all

# 解决方法
# 创建备份目录
mkdir -p /home/backup/{kubernetes,kubernetes/pki}

# 备份pki数据
cd /etc/kubernetes/pki
mv {apiserver.crt,apiserver.key,apiserver-etcd-client.crt,apiserver-etcd-client.key,apiserver-kubelet-client.crt,apiserver-kubelet-client.key,front-proxy-ca.crt,front-proxy-ca.key,front-proxy-client.crt,front-proxy-client.key} /home/backup/kubernetes/
# 重新初始化
kubeadm init phase certs all

# 备份config
cd /etc/kubernetes/
mv {admin.conf,controller-manager.conf,scheduler.conf} /home/backup/kubernetes/
# 重新初始化
kubeadm init phase kubeconfig all

# 复制admin.conf到用户目录下
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 注意:如果问题解决,需要重新删除和添加节点

### 升级Kubernetes集群至更高版本 对于Ubuntu系统上的Kubernetes集群升级操作,官方文档建议遵循一系列具体步骤来确保整个过程的安全性和稳定性。考虑到当前环境中的Kubernetes版本为1.24.17,在执行任何变更之前,务必备份所有重要数据并确认目标版本兼容现有工作负载。 #### 准备阶段 为了顺利进行升级流程,需先完成如下准备工作: - **验证集群状态**:通过`kubectl get nodes`检查节点健康状况;利用`kubectl describe node <node-name>`获取更详细的诊断信息。 - **停止不必要的Pod和服务**:减少潜在干扰因素有助于简化后续步骤。 - **保存配置文件副本**:特别是API服务器、控制器管理器等核心组件的相关设置。 #### 执行升级 ##### 更新kubelet和kubeadm包 针对基于Debian/Ubuntu的操作系统,推荐采用APT仓库方式安装最新版软件包。在此之前,应确保已启用正确的源地址以便访问期望的发行渠道[^5]。 ```bash apt-get update && apt-get install -y kubeadm kubelet kubectl --allow-change-held-packages ``` 注意上述命令会自动处理依赖关系并将指定程序提升到可用最高版本。如果希望锁定特定次版本号,则可在指令末尾附加相应参数(如`=v1.26.0-00`),这取决于实际需求以及所处生产环境中对稳定性的考量。 ##### 运行kubeadm upgrade plan 此命令用于评估集群内各组成部分是否满足迁移条件,并展示可选的目标标签列表供管理员挑选合适选项。 ```bash kubeadm upgrade plan ``` 一旦决定了要应用的新标记,请继续下一步骤实施转换动作。 ##### 实施kubeadm upgrade apply 选定适当的目标版本后,即可发出正式请求让控制平面成员依次重启进入新形态。 ```bash kubeadm upgrade apply v1.XX.YY ``` 这里XX代表次要版本号而YY表示修订级别编号。期间可能会提示输入yes/no以确认某些破坏性改动,默认情况下不会造成服务中断现象发生。 ##### 节点层面调整 当master端成功过渡之后,还需照顾worker机器使之同步跟进变化趋势。每台计算资源实例上均需重复下面这段脚本直至全部就绪为止。 ```bash sudo kubeadm upgrade node sudo systemctl restart kubelet ``` 最后一步旨在刷新本地守护进程记录从而反映最新的全局设定情况。 #### 验证成果 待一切尘埃落定以后,可以通过多种手段检验最终效果如何: - `kubectl version`对比客户端与服务器两端报告出来的build information; - 查看各个组件日志输出寻找异常迹象; - 测试常用功能特性保证业务逻辑正常运作不受影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值