kubeadm部署k8s-1.32版本集群(1个master,1个worker)
使用最新版的kubeadm部署一个最小版的k8s集群,只有一个master和1个worker,这种部署方式,不满足高可用,仅限于本地学习使用,不可以放到生产上用,先看一下文章的目录。
文章目录
- 1、基本信息
- 1.1、服务器基本信息
- 1.2、k8s版本
- 2、关闭swap
- 3、启用ip转发功能
- 4、安装容器运行时
- 4.1、部署containerd
- 4.2、安装runc
- 4.3、安装CRI
- 4.4、生成config.toml文件
- 5、安装kubectl、kubeadm、kubelet
- 5.1、更新 apt 包索引并安装使用 Kubernetes apt仓库所需要的包
- 5.2、下载用于 Kubernetes 软件包仓库的公共签名密钥
- 5.3、添加 Kubernetes apt仓库
- 5.4、更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
- 6、使用kubeadm部署master节点
- 7、保存k8s集群的安全配置文件
- 8、安装网络插件
- 9、部署Rook项目
- 10、查看master节点的状态以及master节点的pod
- 11、worker节点部署
- 12、验证k8s集群
- 12.1、编写yaml文件
- 12.2、部署nginx的pod
- 12.3、查看pod的启动过程
- 12.4、查看nginx是否启动成功
- 13、参考文档
1、基本信息
1.1、服务器基本信息
linux版本 | 机器配置 | k8s角色 |
---|---|---|
ubuntu 22.04 LTS 64位 | 4C8G,50G硬盘 | master |
ubuntu 22.04 LTS 64位 | 2C4G,50G硬盘 | worker |
1.2、k8s版本
1.32版本
2、关闭swap
sudo swapoff -a
3、启用ip转发功能
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#保存并退出执行,该命令会从 /etc/sysctl.conf 文件中重新加载所有参数设置。
sudo sysctl -p
4、安装容器运行时
可以参考这个文档里的option1安装容器运行时。也可以直接看我下面的描述,在两台机器都验证过,保证可用
简单提下,容器运行时,比如我们常说的docker,就是一种容器运行时的解决方案,k8s通过CRI操作容器运行时来增删改容器
4.1、部署containerd
(1)、下载并安装containerd
通过查看uname -m命令查看适合你机器的版本,如果命令反馈x86,就下载amd版本
containerd下载
//将containerd解压到/usr/local目录
tar Cxzvf /usr/local containerd-2.0.4-linux-amd64.tar.gz
(2)、配置systemd服务
通过查看uname -m命令查看适合你机器的版本,如果命令反馈x86,就下载amd版本
containerd.service文件下载
//文件放置目录
/usr/local/lib/systemd/system/
(3)、服务化containerd
systemctl daemon-reload
systemctl enable --now containerd
4.2、安装runc
通过查看uname -m命令查看适合你机器的版本,如果命令反馈x86,就下载amd版本
runc下载
//安装runc
install -m 755 runc.amd64 /usr/local/sbin/runc
4.3、安装CRI
CRI下载
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.6.2.tgz
4.4、生成config.toml文件
默认情况下,containerd不会生成config.toml文件,所以需要手动生成并配置下
//1、生成config.toml文件
containerd config default > config.toml
//2、将config.toml文件移动到/etc/containerd/目录,目录不存在,就创建下
mkdir -p /etc/containerd/
5、安装kubectl、kubeadm、kubelet
可以参考官方文档
也可以看我写的,我也是从官方文档上拿下来的,在两台机器验证过
我是ubuntu机器,所以参考的是Debian的方案
5.1、更新 apt 包索引并安装使用 Kubernetes apt仓库所需要的包
# 更新apt包
sudo apt-get update
# 安装Kubernetes apt仓库所需要的包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
5.2、下载用于 Kubernetes 软件包仓库的公共签名密钥
# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
5.3、添加 Kubernetes apt仓库
# 1.32版本适用。此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
5.4、更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
6、使用kubeadm部署master节点
kubeadm init
出现下面的内容代表master部署成功
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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.conf
# 这个链接要保存一下。后面worker节点需要通过执行该命令来加入这个master所在的k8s集群
kubeadm join 192.168.17.142:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:8bcc34481b37c8325791bc0d275bf7aab6b1c9222c4ea23f5dfa4988d3f21f60
7、保存k8s集群的安全配置文件
部署master成功后的输出里,k8s提示我们需要执行以下三个命令。因为访问k8s集群是需要加密访问的,这三条命令的意思就是使用刚刚生成的安全配置文件来访问k8s集群
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
8、安装网络插件
网络插件的选择有很多种,有Flannel、calico以及weave等等,相对来说,weave要简单点。我们这里使用weave
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
9、部署Rook项目
Rook 项目是一个基于 Ceph 的 Kubernetes 存储插件,我们需要让pod能共享存储,所以需要使用这种分布式的存储方式。
官方的quickStart
访问不了,也可以看我下面的描述,从官方文档上抄下来的
#先把Rook的代码克隆到本地
git clone --single-branch --branch v1.16.5 https://github.com/rook/rook.git
#进入examples目录
cd rook/deploy/examples
#安装Rook
命令1:kubectl create -f crds.yaml -f common.yaml -f operator.yaml
命令2:kubectl create -f cluster.yaml
10、查看master节点的状态以及master节点的pod
(1)、查看master节点的状态
kubectl get nodes
(2)、查看master节点的pod
kubectl get pods -n kube-system
11、worker节点部署
worker节点初始化之前,先要把标题1到标题4的所有步骤都执行一遍,也就是说worker节点上也需要有kubeadm、kubelet、kubectl这些组件。
组件安装好后,把刚刚部署master成功的kubeadm init命令复制过来执行即可
kubeadm join 192.111.10.042:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:8bcc34481b37c8325791bc0d275bf7aab6b1c9222c4ea23f5dfa4988d3f21f60
12、验证k8s集群
为了验证我们部署的k8s集群是否可用,下面我们部署一个nginx的pod
12.1、编写yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:selector:matchLabels:app: nginxreplicas: 2template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.27.4ports:- containerPort: 80
12.2、部署nginx的pod
kubectl create -f nginx-deployment.yaml
12.3、查看pod的启动过程
kubectl describe pod nginx-deployment-67594d6bf6-9gdvr
Events描述了这个pod的部署过程,这个信息很重要,后面我们debug时,很多时候要从这个地方看容器的部署情况
12.4、查看nginx是否启动成功
可以进入nginx的容器
kubectl exec -it nginx-deployment-558d6675d6-gvrm8 -- /bin/bash
然后访问一下80端口看下
$ curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
容器方式部署nginx成功
13、参考文档
参考了这个老哥的文档,感谢老哥分享,https://blog.csdn.net/weixin_44102162/article/details/142640088