kubeadm部署k8s-1.32版本集群(1个master,1个worker)

使用最新版的kubeadm部署一个最小版的k8s集群,只有一个master和1个worker,这种部署方式,不满足高可用,仅限于本地学习使用,不可以放到生产上用,先看一下文章的目录。

文章目录

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

bash 复制代码
sudo swapoff -a

3、启用ip转发功能

bash 复制代码
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下载

bash 复制代码
//将containerd解压到/usr/local目录
tar Cxzvf /usr/local containerd-2.0.4-linux-amd64.tar.gz

(2)、配置systemd服务

通过查看uname -m命令查看适合你机器的版本,如果命令反馈x86,就下载amd版本
containerd.service文件下载

bash 复制代码
//文件放置目录
/usr/local/lib/systemd/system/

(3)、服务化containerd

bash 复制代码
systemctl daemon-reload
systemctl enable --now containerd

4.2、安装runc

通过查看uname -m命令查看适合你机器的版本,如果命令反馈x86,就下载amd版本
runc下载

bash 复制代码
//安装runc
install -m 755 runc.amd64 /usr/local/sbin/runc

4.3、安装CRI

CRI下载

bash 复制代码
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文件,所以需要手动生成并配置下

bash 复制代码
//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仓库所需要的包

bash 复制代码
# 更新apt包
sudo apt-get update
# 安装Kubernetes apt仓库所需要的包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

5.2、下载用于 Kubernetes 软件包仓库的公共签名密钥

bash 复制代码
# 如果 `/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仓库

bash 复制代码
# 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,并锁定其版本

bash 复制代码
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

6、使用kubeadm部署master节点

bash 复制代码
kubeadm init

出现下面的内容代表master部署成功

bash 复制代码
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
# 这个链接要保存一下。后面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集群

bash 复制代码
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

bash 复制代码
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

9、部署Rook项目

Rook 项目是一个基于 Ceph 的 Kubernetes 存储插件,我们需要让pod能共享存储,所以需要使用这种分布式的存储方式。
官方的quickStart

访问不了,也可以看我下面的描述,从官方文档上抄下来的

bash 复制代码
#先把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节点的状态

bash 复制代码
kubectl get nodes

(2)、查看master节点的pod

bash 复制代码
kubectl get pods -n kube-system

11、worker节点部署

worker节点初始化之前,先要把标题1到标题4的所有步骤都执行一遍,也就是说worker节点上也需要有kubeadm、kubelet、kubectl这些组件。

组件安装好后,把刚刚部署master成功的kubeadm init命令复制过来执行即可

bash 复制代码
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文件

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.27.4
        ports:
        - containerPort: 80

12.2、部署nginx的pod

bash 复制代码
kubectl create -f nginx-deployment.yaml

12.3、查看pod的启动过程

bash 复制代码
kubectl describe pod nginx-deployment-67594d6bf6-9gdvr

Events描述了这个pod的部署过程,这个信息很重要,后面我们debug时,很多时候要从这个地方看容器的部署情况

12.4、查看nginx是否启动成功

可以进入nginx的容器

bash 复制代码
kubectl exec -it nginx-deployment-558d6675d6-gvrm8 -- /bin/bash

然后访问一下80端口看下

bash 复制代码
$ 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

相关推荐
能不能别报错7 小时前
K8s学习笔记(十六) 探针(Probe)
笔记·学习·kubernetes
能不能别报错8 小时前
K8s学习笔记(十四) DaemonSet
笔记·学习·kubernetes
火星MARK9 小时前
k8s面试题
容器·面试·kubernetes
Serverless社区11 小时前
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
阿里云·云原生·serverless·函数计算
赵渝强老师11 小时前
【赵渝强老师】Docker容器的资源管理机制
linux·docker·容器·kubernetes
能不能别报错12 小时前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
稚辉君.MCA_P8_Java12 小时前
kafka解决了什么问题?mmap 和sendfile
java·spring boot·分布式·kafka·kubernetes
乄bluefox12 小时前
保姆级docker部署nacos集群
java·docker·容器
每天进步一点_JL13 小时前
Docker 是什么?
后端·docker·容器
一叶飘零_sweeeet13 小时前
从 0 到 1 掌控云原生部署:Java 项目的 Docker 容器化与 K8s 集群实战指南
docker·云原生·kubernetes·项目部署