首页 > 系统相关 >在Ubuntu20.04上使用kubeadm搭建k8s集群(2022年8月版本为v1.24.4)

在Ubuntu20.04上使用kubeadm搭建k8s集群(2022年8月版本为v1.24.4)

时间:2022-08-20 11:14:40浏览次数:110  
标签:Ubuntu20.04 -- containerd sudo apt v1.24 2022 kubeadm k8s

1. 一些真心话

在开始之前,需要将重要的事情说三遍:一定要认真阅读官方文档!一定要认真阅读官方文档!!一定要认真阅读官方文档!!!

我在搭建k8s之前看了网上很多教程,也尝试的执行了几次,但都是失败而告终(有的是网络原因,你懂得;有的是由于版本问题),因为k8s一直在迭代升级,某个版本可能会有重要更新,导致之前的安装教程失效。所以才强调:一定要以官方文档为主,最终解释权也在官方文档

这里给出官方文档链接使用 kubeadm 引导集群 | Kubernetes。有一点需要提醒下,文档中能点击的链接一定要多留心看一下,防止掉坑。

2. 环境准备

我是在Macbook Pro(CPU为M1 Pro)上使用虚拟机搭建的,使用的操作系统是Ubuntu 20.04 LTS。

虚拟机说明如下:

机器名(hostname) 配置 虚拟机IP地址 说明
k8s-master 2核心4GB 192.168.181.130 k8s的控制平面,目前master是单点
k8s-worker1 2核心4GB 192.168.181.131 k8s的Node节点,主要运来运行k8s pod
k8s-worker2 2核心4GB 192.168.181.132 k8s的Node节点,主要运来运行k8s pod

因为需要12GB的内存,所以对你的宿主机有一些要求,最少8核心16GB,推荐8核心32GB。

3. master节点配置与安装

注意--》操作系统配置:

禁止swap:

sudo swapoff -a

配置网络相关:

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

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
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

# 应用 sysctl 参数而不重新启动
sudo sysctl --system

修改hostname:

sudo hostnamectl set-hostname k8s-master

修改/etc/hosts配置文件:

127.0.0.1 localhost
# 127.0.1.1 k8s-master
192.168.181.130 k8s-master

3.1 安装容器运行时

使用容器运行时可以参考这篇文档容器运行时安装与配置。这里我使用的是containerd,安装方式可以参考containerd/getting-started.md at main · containerd/containerd (github.com)。本文采用的是apt安装方式:

sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt update

sudo apt install -y containerd.io

生成containerd默认配置文件并修改相应设置:

containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1

sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

sudo sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml

重启containerd并设置开机启动:

sudo systemctl restart containerd

sudo systemctl enable containerd

3.2 安装 kubeadm、kubelet 和 kubectl

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"

sudo apt update

sudo apt install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

使用kubeadm version查看k8s版本。

3.3 配置cgroup驱动 

cgroup推荐使用 systemd 驱动,不推荐 cgroupfs 驱动。3.1和3.2已经配置好,这里只是提下,官方建议使用systemd驱动,我们按照官方建议操作即可。

3.4 使用 kubeadm 创建集群

更新:我这里使用的是aliyun源,因此可以正常初始化,如果使用K8s的源,这里你就要栽大跟头了(网络问题):

sudo kubeadm init --kubernetes-version=v1.24.4 --image-repository registry.aliyuncs.com/google_containers --control-plane-endpoint=192.168.181.130 --pod-network-cidr=192.168.0.0/16 --v=5

control-plane-endpoint这个设置成你的master节点的IP即可。pod-network-cidr这个取决于你使用的网络插件(见3.5内容)。

然而就是这么一条命令,之前花了我很多时间,添加了好多参数,然而最终还是失败。所以如果需要相关参数,一定要认真查看官方文档啊!官方的才是解释最清楚的。

这条命令我经常遇到的一个问题是kubelet找不到k8s-master。原因大概率是网络问题,一直没能解决,所以换源后就正常了!

如果这里安装失败的话,使用sudo kubeadm reset -f重置然后重新执行上述kubeadm init命令。

这条命令需要运行一段时间,貌似时长取决于你的网速。运行好后会有一大段文本,其中最后几行的文本比较重要,为了完整性,我将我运行的整个文本都贴出来了:

xxx

然后执行下面的命令就OK了:

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

上面的命令主要是配置非root用户运行kubectl的权限。

下面这条命令可以添加控制平面节点:

kubeadm join 192.168.181.130:6443 --token y379vb.8p3j5g7szhf9jtmz \
	--discovery-token-ca-cert-hash sha256:883270368ba74e3949c58f827ec5c02144e05da350fce65cb51db0dd88a4206c \
	--control-plane

下面这条命令可以添加工作节点:

kubeadm join 192.168.181.130:6443 --token y379vb.8p3j5g7szhf9jtmz \
	--discovery-token-ca-cert-hash sha256:883270368ba74e3949c58f827ec5c02144e05da350fce65cb51db0dd88a4206c

这两条命令都是前面那一大段文本生成的,你用你自己生成的,我这里只是展示。

3.5 安装网络附加组件

执行kubectl get po -n kube-system后你看到coredns貌似没有正常运行,就是因为缺少网络附加组件,官方文档说就是这么设计的,所以我们需要安装一个网络组件。详细可以参考k8s网络附加组件这篇官方文档。

这里我选用了Calico。Calico的文档可以参考这里:Quickstart for Calico on Kubernetes (tigera.io)

安装Calico的命令如下:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.0/manifests/tigera-operator.yaml

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.0/manifests/custom-resources.yaml

确认下是否正常运行:

kubectl get pods -n calico-system

执行下面命令使master参与调度(可选,optional):

kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-

查看节点情况:

kubectl get nodes -o wide

 4 woker节点配置与安装

将3.1、3.2的内容在worker节点执行一遍。然后运行kubeadm init输出的kubeadm join命令即可:

 

到此你的3节点(1个master,2个 worker)K8s集群搭建成功,祝你顺利!!!

 

参考文档:

标签:Ubuntu20.04,--,containerd,sudo,apt,v1.24,2022,kubeadm,k8s
From: https://www.cnblogs.com/bfstudy/p/16602008.html

相关文章

  • 2022-8-20 每日一题-二叉树-递归
    654.最大二叉树难度中等499收藏分享切换为英文接收动态反馈给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个......
  • 2022/8/20暑假学习日记
    1问题:合格的软件工程师,有什么具体的标准吗?还是说能写代码,又能发现问题解决问题就可以成为了呢?我们现阶段可以从哪方面开始培养自己的开发思维和能力,向工程师迈进?回答:作为......
  • 2022-8-20 剑指offer-滑动窗口+(桶排序或者有序集合)
    剑指OfferII057.值和下标之差都在给定的范围内难度中等55收藏分享切换为英文接收动态反馈给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在......
  • 2022 牛客多校 Extra & 第九场部分题解
    2022牛客多校第九场&Extra部分题解前段时间沉迷生活大爆炸&原神&vtb&galgame&番无法自拔,因此咕到现在。。。Cmostp挺妙的题。本以为有一只log的做法。......
  • 2022年8月20日感悟
      你可以掌控自己的生活,改变自己的观念,习惯,生活也会发生改变,不要再当悲情受害者了,脱离受害者模式,做自己命运的主人,你可以掌控自己的人生,你可以为自己写一个快乐的人生剧......
  • 2022年8月20,第一组,周鹏,从1到m中随机取n个数,n<=m,显示出所有取法
    staticRandoma1=newRandom();staticintm=a1.nextInt(20)+1;//随机取一个1到20的值staticintn=a1.nextInt(m)+1;staticint[]a=newint[m];......
  • 2022-08-19 第五组 赖哲栋 学习笔记
    Statement的不足大量的字符串拼接,代码可读性降低sql注入PreparedStatement预编译(预加载)接口通过conn获取的对象是statement接口的子接口sql语句中可以传参。......
  • 2022-08-19 第二小组 张鑫 学习笔记
    实训四十一天JDBC(PreparedStatement,事务)1.学习重点1.PreparedStatement2.事务处理2.学习心得今天是在黑夜中学习的一天...3.学习内容PreparedStatementStatement......
  • 2022-8-19 第六组 JDBC(2)
    PreparedStatement:执行sql的对象1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题1.输入用户随便,输入密码:a'or'a'='a2.sql:sel......
  • 2022-08-19 第五组 罗佳明
    一、学习重点  二、学习内容案例一:查询(面对对象思想)packagecom.jsoft.morning.test;importorg.junit.Test;importjava.util.List;publicclassDemo{......