1.环境部署之前要做的事情:

========================
ip 分配:
一台阿里云ECS
master0:
192.168.8.169
node01:
192.168.8.170
node02:
192.168.8.171
========================
永久修改主机名:
hostnamectl set-hostname master01
reboot

hostnamectl set-hostname node01
reboot

hostnamectl set-hostname node02
reboot
========================
更新系统软件包:
>: yum update -y
# 安装软件管理包和可能使用的依赖
>: yum -y groupinstall "Development tools"
>: yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
# 检测是否成功:git依赖安装是否成功 pass
# 安装一些软件包
yum install bash-completion vim wget telnet sysstat net-tools lsof-y
========================
# 禁用swap
swapoff -a # 临时修改,重启后恢复

[root@master01 ~]# vim /etc/fstab # 配置文件 永久修改,修改

[root@master01 ~]# vim /etc/fstab
在这里插入图片描述
[root@master01 ~]# free -g
在这里插入图片描述
Swap 显示都为0表示修改成功了。

# 安装 docker 和 docker-compose 必备4条命令
[root@master01 ~]# sudo yum update
[root@master01 ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
[root@master01 ~]# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master01 ~]# sudo yum install docker-ce -y

# 查看你安装的版本
[root@master01 ~]#docker -v 
### Docker version 20.10.5, build 55c4c88 

# 启动 docker 服务端:
[root@master01 ~]#systemctl start docker    # 启动
[root@master01 ~]#systemctl stop docker     # 停止
[root@master01 ~]#systemctl restart docker  # 重启

# 安装docker-compose
[root@master01 ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
[root@master01 ~]# sudo chmod +x /usr/local/bin/docker-compose # 虚拟机必须执行该命令 否则没权限
[root@master01 ~]# docker-compose -v
### docker-compose version 1.25.0, build 0a186604

######》node01 和 node02 步骤一样的 - 要做配置《######
# docker 换源
#1、修改源命令
vim /etc/docker/daemon.json

#2、 添加源
{
"registry-mirrors": [
"https://kfwkfulq.mirror.aliyuncs.com",
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"dns": ["8.8.8.8","8.8.4.4"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
    "max-size": "100m"
  },
"storage-driver": "overlay2"
}

#3、重启docker服务
systemctl daemon-reload
systemctl restart docker

######》node01 和 node02 步骤一样的 - 要做配置《######

在这里插入图片描述

2.安装运行时

在这里插入图片描述
这里我们选择 安装 Docker,此步骤已完成。

3.安装 kubeadm, kubelet, kubectl
安装方式,箭头所指:
在这里插入图片描述

mkdir k8s_install/  && cd k8s_install/
mkdir k8s_install_pkg && cd k8s_install_pkg
# 访问该网址下载
# 安装CNI插件
https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgz

# 安装crictl
https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.22.0/crictl-v1.22.0-linux-amd64.tar.gz

# 安装 kubeadm kubelet kubectl
https://storage.googleapis.com/kubernetes-release/release/v1.19.14/bin/linux/amd64/kubeadm
https://storage.googleapis.com/kubernetes-release/release/v1.19.14/bin/linux/amd64/kubelet
https://storage.googleapis.com/kubernetes-release/release/v1.19.14/bin/linux/amd64/kubectl

# 安装 kubelet.service 或谷歌搜 kubelet.service 点击github master raw 右上角
### 这是没注意版本的错误写法,注个意
#https://raw.githubusercontent.com/kubernetes/release/master/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service
### 注意版本是v0.4.0,在master分支右边点击 tag找到v0.4.0即可
https://raw.githubusercontent.com/kubernetes/release/v0.4.0/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service

# 安装 10-kubeadm.conf 或谷歌搜 10-kubeadm.conf 点击github master raw 右上角
### 这是没注意版本的错误写法,注个意
# https://raw.githubusercontent.com/kubernetes/release/master/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf

### 注意版本是v0.4.0,在master分支右边点击 tag找到v0.4.0即可
https://raw.githubusercontent.com/kubernetes/release/v0.4.0/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf

下载好后截图如下:
在这里插入图片描述

cd /root/k8s_install
vim k8s_install.sh

复制粘贴 以下命令到 k8s_install.sh里, 安装的完整命令如下:

#!/bin/sh
K8S_INSTALL_PKG=~/k8s_install/k8s_install_pkg
CNI_VERSION="v0.8.2"
ARCH="amd64"
sudo mkdir -p /opt/cni/bin
# curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz
tar -zxvf $K8S_INSTALL_PKG/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz -C  /opt/cni/bin

DOWNLOAD_DIR=/usr/local/bin
sudo mkdir -p $DOWNLOAD_DIR

CRICTL_VERSION="v1.22.0"
ARCH="amd64"
# curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz
tar -zxvf $K8S_INSTALL_PKG/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz -C $DOWNLOAD_DIR

RELEASE="v1.19.14"
ARCH="amd64"
cd $DOWNLOAD_DIR
# sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet,kubectl}
cd $K8S_INSTALL_PKG
cp kubeadm kubelet kubectl $DOWNLOAD_DIR/
cd $DOWNLOAD_DIR
sudo chmod +x {kubeadm,kubelet,kubectl}

RELEASE_VERSION="v0.4.0"
# curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service
cat $K8S_INSTALL_PKG/kubelet.service | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service
sudo mkdir -p /etc/systemd/system/kubelet.service.d
#curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
cat $K8S_INSTALL_PKG/10-kubeadm.conf | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

systemctl enable --now kubelet

以上命令含义请参考 URL

然后截图进度如下:
在这里插入图片描述
执行命令:

[root@master01 k8s_install]# chmod +x k8s_install.sh

在这里插入图片描述
然后执行命令:

[root@master01 k8s_install]# ./k8s_install.sh 

正常的输出:
在这里插入图片描述
成功的标志是:
执行命令:

[root@master01 k8s_install]# kubeadm version

在这里插入图片描述
能看到这个输出就说明 kubeadm 安装成功了。
执行命令:

[root@master01 k8s_install]# kubectl version

版本是1.19.14,有个连接拒绝的报错,因为目前没有通过 kubeadm 去 安装 K8s 集群,所以它报了拒绝的提示信息:
在这里插入图片描述

[root@master01 k8s_install]# systemctl status kubelet

执行结果:
在这里插入图片描述
结果说明:
红色代码提示退出
同样的道理,因为我们还没有 安装 K8s 集群,安装之后 kubelet 就能跑起来了。

4.使用 kubeadm 创建集群
执行命令:

[root@master01 ~]# kubeadm init -h

重点关注以下参数:

[root@master01 ~]# kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.224.0.0/16 --kubernetes-version=v1.19.14 --apiserver-advertise-address=192.168.8.169 

虚拟机里执行上述命令会报错:

W0816 22:16:49.498476   23127 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.19.14
[preflight] Running pre-flight checks
	[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
	[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
	[WARNING FileExisting-socat]: socat not found in system path
	[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.17. Latest validated version: 19.03
	[WARNING Hostname]: hostname "master01" could not be reached
	[WARNING Hostname]: hostname "master01": lookup master01 on 192.168.8.1:53: no such host
error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR FileExisting-conntrack]: conntrack not found in system path
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

这么做解决问题:
(1)关闭防火墙

# 临时关闭防火墙 在master node01 node02上都执行
sudo systemctl stop firewalld
# 打开防火墙
#sudo systemctl start firewalld

(2)--ignore-preflight-errors=all

[root@master01 ~]# kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.224.0.0/16 --kubernetes-version=v1.19.14 --apiserver-advertise-address=192.168.8.169 --ignore-preflight-errors=all

参考解决问题链接

解决效果:

在这里插入图片描述
继续走,

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

在这里插入图片描述
执行命令 查看节点:

kubectl get node

在这里插入图片描述
STATUS 为什么是 NotReady ?
我们执行以下命令查看原因:

kubectl get pod -A

在这里插入图片描述

分析原因:
Pending 状态是因为我们没有安装网络插件。

下一步行动:安装网络插件
kube-flannel.yml 下载地址:

https://raw.githubusercontent.com/flannel-io/flannel/release/v0.14.1/Documentation/kube-flannel.yml

在这里插入图片描述
在这里插入图片描述
命令如下:

[root@master01 ~]# cd k8s_install/k8s_install_pkg/
[root@master01 k8s_install_pkg]# ls 
[root@master01 k8s_install_pkg]# kubectl apply -f kube-flannel.yml 

效果:
在这里插入图片描述

问题:
flannel 状态为 Init:ImagePullBackOff

原因:
查看 kube-flannel.yml 文件时发现 quay.io/coreos/flannel:v0.14.0,quay.io 网站目前国内无法访问。
在这里插入图片描述

做法:
在 https://github.com/coreos/flannel/releases 中下载 flanneld-v0.14.0-amd64.docker 导入到docker中

# 下载链接
https://github.com/flannel-io/flannel/releases/download/v0.14.0/flanneld-v0.14.0-amd64.docker

在这里插入图片描述

然后 在 master01上 load 镜像

[root@master01 k8s_install_pkg]# docker load < flanneld-v0.14.0-amd64.docker

在这里插入图片描述
docker load 使用指南

然后执行:

kubectl get pod -n kube-system

在这里插入图片描述

[root@master01 k8s_install_pkg]# kubectl get node

在这里插入图片描述

可以看到,成功加载镜像后,再次查看 pod 变成Running状态,node 也是Ready状态。

到这里 master节点就创建成功了,

然后继续操作:
master0:
192.168.8.169
node01:
192.168.8.170
node02:
192.168.8.171

[root@master01 k8s_install_pkg]# cd ~
[root@master01 ~]# scp -r k8s_install root@192.168.8.170:~/

在这里插入图片描述
继续:

[root@master01 ~]# scp -r k8s_install root@192.168.8.171:~/

在这里插入图片描述

到这里进度如下:
在这里插入图片描述

然后执行:

[root@node01 ~]# cd k8s_install/
[root@node01 k8s_install]# ls
k8s_install_pkg  k8s_install.sh
[root@node01 k8s_install]# ./k8s_install.sh

执行成功:
在这里插入图片描述
在 master 节点初始化的时候有条重要的命令:

kubeadm join 192.168.8.169:6443 --token 5uob4q.d706eoeiuc67a4ov \
    --discovery-token-ca-cert-hash sha256:8ab6ba1597e7f6b0406d61463ebb196b1191ece3a073f83d4e4547cb9e0becb1 

将该命令拷贝到 node01 节点上:
在这里插入图片描述
遇到问题不要慌,我们有 debug 的能力,解决问题见图中标亮的部分。
看提示信息我们要安装 conntrack 依赖:
做法:

[root@node01 k8s_install]# yum install conntrack -y

看到提示信息 :

[ERROR Swap]: running with swap on is not supported. Please disable swap

做法:注释掉【见master做法,往上翻,不赘述了】
这里多说一个技巧,让 node02先睡眠,为node01腾出内存空间,保证node01配置的完整和准确性!!!
在这里插入图片描述
或者使用命令:

swapoff -a 

然后执行:

[root@node01 k8s_install]# kubeadm join 192.168.8.169:6443 --token 5uob4q.d706eoeiuc67a4ov     --discovery-token-ca-cert-hash sha256:8ab6ba1597e7f6b0406d61463ebb196b1191ece3a073f83d4e4547cb9e0becb1 --ignore-preflight-errors=all

然后输出:
在这里插入图片描述
原因是什么?
在这里插入图片描述
我们没有给 node01 节点配置 docker换源,配置好之后解决。【换源命令直接复制文章开头部分】

解决:
提示节点已经加入成功了:
在这里插入图片描述

[root@master01 ~]# kubectl get nodes

可以看到,node01 STATUS 是 Ready:
在这里插入图片描述
同样的配置思路,配置node02节点。
小技巧:
由于搭建集群环境对内存有要求,同时开3台虚拟机我的机子比较卡,内存不够用。
我们可以开启 master01 和 node 01,让 node02 睡眠,先把 master01和 node01配置好,
然后再 让node01睡眠,开启node02,然后配置过程跟配置node01一样的。

注意 关闭 node02 的 swapoff 和下载 conntrack 和 配置 docker换源,其他的没啥问题。

K8s 集群部署过程 到此就完结了,感谢 CSDN 的推荐,感谢 网友的点赞关注,我会继续输出干货的技术文章的。

关注我,为思考点赞!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐