目录
- 一、设备准备
- 二、Master节点部署
- 1.设置hostname
- 2.关闭防火墙
- 3.关闭selinux
- 4.关闭swap
- 5.将桥接的IPV4流量传递到iptables 的链
- 6.安装docker
- 7.Kubernetes yum源配置
- 8.安装k8s
- 9.部署Master
- 10.安装calico网络
- 三、Node节点部署
- 四、常见问题
- 1.在安装docker时centos8yum库中没有符合最新版docker-ce对应版本的containerd.io
- 2.在配置docker文件驱动时,文件不存在或其他
- 3.在kubeadm init 初始化master节点时,端口被占用
- 4.在kubeadm init 初始化master节点时,swap未关闭
- 5.在kubeadm init 初始化master节点时,出现The connection to the server :6443 was refused - did you specify the right host or pot
- 6.在k8s后续添加节点失效couldn't validate the identity of the API Server
自己在进行k8s部署集群时,遇到了很多很多问题,可以说是非常麻烦,本文主要是记录部署全过程以及常见问题的一些解决方案
一、设备准备
虚拟机: VMware Workstation Pro 15
这里用到了三台
k8s-master01
k8s-node01
k8s-node02
操作系统 CentOS8
具体设置可参考另一篇文章 https://blog.csdn.net/qq_46595591/article/details/107151939
设置完成后,在终端输入命令 systemctl set-default multi-user.target
永久关闭图形界面,这样可以减少内存使用
二、Master节点部署
注意,以下均在超级用户下执行
1.设置hostname
操作命令
1.hostnamectl set-hostname 主机名(master/node)
2. cat <<EOF > /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
masters虚拟机ip master节点名(例如 k8s-master01)
node虚拟机ip node 节点名(例如 k8s-node01) //有几台加几台
EOF
或者 vim /etc/hosts 进入文档修改
图
2.关闭防火墙
操作命令
systemctl stop firewalld //必须关闭
3.关闭selinux
操作命令
setenforce 0
4.关闭swap
操作命令
1.swapoff -a //仅一次,重启后需重新关闭
2.vim /etc/fstab 注释掉最后一句 //永久关闭
图
5.将桥接的IPV4流量传递到iptables 的链
操作命令
1.cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
2.sysctl --system
图
6.安装docker
操作命令
1.yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine //卸载已安装的docker
2.yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3.yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//注意这里不要用国外的网址,用阿里云镜像仓库网址,下载速度快
4.yum install docker-ce docker-ce-cli containerd.io
5.docker --version //成功后查看docker版本信息
6.mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://v12afuoi.mirror.aliyuncs.com"]
}
EOF //增加镜像加速
7.tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"]
} //docker文件驱动默认由cgroupfs 改成 systemd,与k8s保持一致避免conflict,也可以vim /etc/docker/daemon.json
8.systemctl enable docker
systemctl start docker //设置开机启动
9.docker info | grep driver //查看文件驱动
注意,这里可能会出现错误,在下面的问题解决中会有详细的解决方案
图
7.Kubernetes yum源配置
操作命令
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=1
EOF
图
8.安装k8s
操作命令
1.yum install -y docker-ce kubelet kubeadm kubectl --nobest
2.systemctl enable kubelet //设置开机启动
3.systemctl start kubelet //启动后台daemon
图
9.部署Master
9.1初始化获取要下载的镜像列表
因为国外的网站无法直接访问,只能通过镜像下载来安装
操作命令
1.kubeadm config images list //查看需要安装的镜像
2.kubeadm config print init-defaults > kubeadm.conf //生成默认kubeadm.conf文件
3.sed -i "s/imageRepository: .*/imageRepository: registry.aliyuncs.com\/google_containers/g" kubeadm.conf
//把google镜像仓库地址改为国内阿里云镜像仓库地址
4.sed -i "s/kubernetesVersion: .*/kubernetesVersion: v1.18.1/g" kubeadm.conf //指定kubeadm安装的Kubernetes版本
5. kubeadm config images pull --config kubeadm.conf //下载需要用到的镜像
6. docker images //查看下载好的镜像
7. cat tag.sh
#!/bin/bash
newtag=k8s.gcr.io
for i in $(docker images | grep -v TAG |awk '{print $1 ":" $2}')
do
image=$(echo $i | awk -F '/' '{print $3}')
docker tag $i $newtag/$image
docker rmi $i
done
bash tag.sh //给从阿里云镜像仓库下载下来的镜像打上k8s.gcr.io标识
图
9.2kubeadm init 初始化master节点
操作命令
kubeadm init --kubernetes-version=v1.18.1 --pod-network-cidr=自己定义pod网段(尽量不和master主机在同一个网段) --apiserver-advertise-address=master主机ip
注意,这里可能会出现问题,在下面会有详解
图
9.3.验证测试
操作命令
1.mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config //配置kubectl命令
2.kubectl get node //查看状态
图
10.安装calico网络
操作命令
1.kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
2.kubectl get pods -n kube-system //查看calico网络是否创建成功
图
三、Node节点部署
1.1-8步与上述相同
2.下载安装镜像
操作命令
1.docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0
docker pull registry.aliyuncs.com/google_containers/pause:3.1
docker pull calico/node:v3.1.4
docker pull calico/cni:v3.1.4
docker pull calico/typha:v3.1.4
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0 k8s.gcr.io/kubeproxy:v1.13.0
docker tag registry.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag calico/node:v3.1.4 quay.io/calico/node:v3.1.4
docker tag calico/cni:v3.1.4 quay.io/calico/cni:v3.1.4
docker tag calico/typha:v3.1.4 quay.io/calico/typha:v3.1.4
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.13.0
docker rmi registry.aliyuncs.com/google_containers/pause:3.1
docker rmi calico/node:v3.1.4
docker rmi calico/cni:v3.1.4
docker rmi calico/typha:v3.1.4
2.kubeadm join 10.0.0.180:6443 --token 8urlva.75zrerl6uctfenec \(此证书在之前master节点成功时会有)
> --discovery-token-ca-cert-hash sha256:c462c05da6c3685a334b1b1743d4d9b30a38b78208c338f03f5e7d67befaf8bb
3.kubectl get nodes //查看是否成功
注意,这里可能会出现问题,在下面会有详解
图
四、常见问题
1.在安装docker时centos8yum库中没有符合最新版docker-ce对应版本的containerd.io
在输入命令yum install docker-ce docker-ce-cli containerd.io
时,出现以下报错
解决方案
通过阿里云镜像库安装符合最新docker-ce版本的containerd.io
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm
图
2.在配置docker文件驱动时,文件不存在或其他
通过vim /etc/docker/daemon.json时,文件可能不存在或不可写
解决方案
建议采取第一种
tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
3.在kubeadm init 初始化master节点时,端口被占用
在kubeadm init 初始化master节点时,出现以下报错
解决方案
kubeadm reset //重启
4.在kubeadm init 初始化master节点时,swap未关闭
解决方案:
1.swapoff -a //仅一次,重启后需重新关闭
2.vim /etc/fstab 注释掉最后一句 //永久关闭
5.在kubeadm init 初始化master节点时,出现The connection to the server :6443 was refused - did you specify the right host or pot
解决方案
1.systemctl restart kube-apiserver
2.systemctl restart kube-controller-manager
3.systemctl restart kube-scheduler //重启APISever
6.在k8s后续添加节点失效couldn’t validate the identity of the API Server
在添加node节点时,出现以下报错
是token失效
解决方案
1.kubeadm token create //在master节点上输入 获取新的token