K8s 集群部署过程文档
K8s 集群部署过程文档
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
然后截图进度如下:
执行命令:
[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
然后执行:
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 的推荐,感谢 网友的点赞关注,我会继续输出干货的技术文章的。
关注我,为思考点赞!
更多推荐
所有评论(0)