使用kubeadm手动安装K8s

本次教程安装主要基于Ubuntu 22.04, 使用AWS EC2服务器来部署。当然,AWS也有自己的AWS K8s服务,不过需要花费小钱钱。虽然也不是说不行,但手动安装下也能熟悉K8s。

1. 安装Docker

卸载旧版本:

bash 复制代码
sudo apt-get remove docker docker-engine docker.io containerd runc

设置仓库

更新 apt 包索引
bash 复制代码
sudo apt-get update
安装apt依赖包
bash 复制代码
sudo apt-get install \

    apt-transport-https \

    ca-certificates \

    curl \

    gnupg-agent \

    software-properties-common \

    gpg
添加 Docker 的官方 GPG 密钥
bash 复制代码
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add --
设置稳定版仓库
bash 复制代码
sudo add-apt-repository \

   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \

   $(lsb_release -cs) \

   stable"

安装 Docker Engine-Community

更新 apt 包索引
bash 复制代码
sudo apt-get update
安装最新版本的 Docker Engine-Community 和 containerd
bash 复制代码
sudo apt-get install docker-ce docker-ce-cli containerd.io
测试 Docker 是否安装成功,输入以下指令,能够打印出版本信息则安装成功:
bash 复制代码
sudo docker version
设置Docker镜像加速器和驱动程序
bash 复制代码
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{  "exec-opts": ["native.cgroupdriver=systemd"],

   "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]

}

EOF

sudo tee /etc/docker/daemon.json <<-'EOF'

{  "exec-opts": ["native.cgroupdriver=systemd"]

}

EOF
重启服务
bash 复制代码
sudo systemctl daemon-reload

sudo systemctl restart docker

2. 前置准备

设置安全组

在AWS上对每个节点设置同一安全组并在入站规则中进行绑定:

设置主机名

更改每台服务器的主机名

bash 复制代码
sudo hostnamectl set-hostname "k8s-master"
sudo hostnamectl set-hostname "k8s-node1"
sudo hostnamectl set-hostname "k8s-node2"

关闭Swap分区

bash 复制代码
sudo sed -ri 's/.*swap.*/#&/' /etc/fstab

查看分区是否关闭成功,如果没有输出则说明分区关闭成功

bash 复制代码
swapon -show

若要临时关闭分区

bash 复制代码
swapoff -a

添加主机名

每个节点上添加hosts(注意换成你自己服务器的IP地址

bash 复制代码
sudo nano /etc/hosts

写入以下信息后退出

bash 复制代码
172.31.34.249 k8s-master

172.31.37.96 k8s-node1

172.31.47.59 k8s-node2

桥接IPv4流量

将桥接的IPv4流量传递到iptables的链接,在每个节点添加如下的命令:

bash 复制代码
sudo nano /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

vm.swappiness = 0
加载br_netfilter模块
bash 复制代码
sudo modprobe br_netfilter
查看是否加载
bash 复制代码
lsmod | grep br_netfilter

生效

bash 复制代码
sudo sysctl --system

同步系统时间

每个节点添加时间同步

bash 复制代码
sudo apt -y install ntpdate

sudo ntpdate time.windows.com

开启ipvs 在每个节点安装ipset和ipvsadm

bash 复制代码
sudo apt -y install ipset ipvsadm

每个节点执行如下脚本

bash 复制代码
sudo cat > /etc/sysconfig/modules/ipvs.modules <<EOF

打开写入如下内容

bash 复制代码
#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack

EOF

如果没有该文件夹手动创建:

bash 复制代码
sudo mkdir -p /etc/sysconfig/modules

sudo chmod 777 /etc/sysconfig/modules/

sudo cat > /etc/sysconfig/modules/ipvs.modules <<EOF

在ipvs.modules里写入以下内容:

bash 复制代码
#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack

EOF

授权、运行、检查是否加载:

bash 复制代码
sudo chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

3. 安装kubeadm、kubelet和kubectl

注意:如果后期想要使用 dashboard ,请务必确认版本是否兼容,检查地址:

https://github.com/kubernetes/dashboard/releases

下载用于 Kubernetes公共签名密钥-每个节点

bash 复制代码
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

添加 Kubernetes apt 仓库-每个节点

bash 复制代码
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本-每个节点

bash 复制代码
sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

保持每个节点cgroup drvier和kubelet使用的cgroup drver一致

bash 复制代码
sudo nano /etc/sysconfig/kubelet

添加以下内容

bash 复制代码
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

设置为开机自启动

bash 复制代码
systemctl enable kubelet

4. 部署k8s的++Master节点++

切换到根用户下执行

bash 复制代码
sudo su -

由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址

bash 复制代码
kubeadm init --apiserver-advertise-address=172.31.34.249 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.30.3 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

如果初始遇到Kubeadm初始化报错:[ERROR CRI]: container runtime is not running:

执行以下命令

bash 复制代码
rm -rf /etc/containerd/config.toml
systemctl restart containerd

根据提示信息,在Master节点上使用kubectl工具

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

5. 部署K8s的++从(slave)节点++

在k8s-node1和k8s-node2上分别执行以下命令:

切换到根用户下执行

bash 复制代码
sudo su --

添加主节点的token以及token证书

bash 复制代码
kubeadm join 172.31.34.249:6443 --token 1umscb.zbq9wf4tef99nxkx --discovery-token-ca-cert-hash sha256:e066e73b927432e599ba7b6634e449900bc6b4858e2979a9a4749f35e1dbf30d

6. 部署CNI网络插件

根据提示,在Master节点使用kubectl工具查看节点状态:

bash 复制代码
kubectl get nodes

如果执行后出现couldn't get current server API group list: Get "https://xxxx /api?timeout=32s": dial tcp xxxxxxx: connect: connection refused 错误
则没有永久关闭交换分区情况下中途退出了

解决方式:重新执行一遍关闭命令即可

bash 复制代码
sudo swapoff -a

sudo systemctl restart kubelet

在Master节点部署CNI网络插件

bash 复制代码
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查看部署CNI网络插件进度:

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

再次在Master节点使用kubectl工具查看节点状态:

bash 复制代码
kubectl get nodes

这里可能会有问题,如果master节点上kube-apiserve监听的6443端口时而正常时而异常

刚部署完正常后面一直出现如下错误

The connection to the server xxxxx:6443 was refused - did you specify the right host or port?

查看CNI插件部署进度也出现CrashLoopBackOff错误的话

执行以下命令:

bash 复制代码
containerd config default | tee /etc/containerd/config.toml

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

service containerd restart

service kubelet restart 

7. 查看集群

查看集群健康状态:

bash 复制代码
kubectl get cs
bash 复制代码
kubectl cluster-info

部署成功 !!!(^-^)V

相关推荐
微刻时光6 分钟前
Docker部署Nginx
运维·nginx·docker·容器·经验
@东辰20 分钟前
【golang-技巧】-自定义k8s-operator-by kubebuilder
开发语言·golang·kubernetes
小安运维日记22 分钟前
CKA认证 | Day3 K8s管理应用生命周期(上)
运维·云原生·容器·kubernetes·云计算·k8s
陈小肚29 分钟前
k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储
docker·容器·kubernetes
A陈雷1 小时前
springboot整合elasticsearch,并使用docker desktop运行elasticsearch镜像容器遇到的问题。
spring boot·elasticsearch·docker
小扳1 小时前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
politeboy2 小时前
关于k8s中镜像的服务端口被拒绝的问题
云原生·容器·kubernetes
weixin_438197382 小时前
K8S创建云主机配置docker仓库
linux·云原生·容器·eureka·kubernetes
皮锤打乌龟8 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
南猿北者9 小时前
docker Network(网络)
网络·docker·容器