k8s集群安装及相关问题解决

7 篇文章 0 订阅

1.各机器安装docker
docker安装可参照菜鸟教程:centos安装docker
安装如果版本太新可能会报以下错误

[root@slave01 ~]# sudo yum install docker-ce-20.10.2 docker-ce-cli-20.10.2 containerd.io
上次元数据过期检查:0:16:22 前,执行于 2021年01月05日 星期二22时32分37秒。
错误:
 问题: package docker-ce-3:20.10.2-3.el7.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installe                                                                 d
  - conflicting requests
  - package containerd.io-1.4.3-3.1.el7.x86_64 is filtered out by modular filtering
(尝试添加 '--skip-broken' 来跳过无法安装的软件包 或 '--nobest' 来不只使用最佳选择的软件包)

此时需安装新的containerd.io,选择大于或等于需要的版本进行安装

yum install -y https://download.docker.com/linux/centos/8/x86_64/nightly/Packages/containerd.io-1.4.3-3.1.el8.x86_64.rpm
#或者下载rpm上传安装
yum install -y containerd.io-1.4.3-3.1.el8.x86_64.rpm

2.docker安装完成后使用dockers -v查看版本信息,此时可以尝试启动doceker,启动成功直接下一步,如果启动失败,报一下错的解决步骤:
报错如下:
在这里插入图片描述
首先尝试关闭被屏蔽的docker,命令如下:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker

如果还是没有解除屏蔽则需要将docker卸载重装:
docker卸载:

#查询安装过的软件包
yum list installed | grep docker
#卸载安装的软件包
yum -y remove  docker-ce.x86_64
#删除Docker存储文件
rm -rf /var/lib/docker
#重新执行docker安装命令,这里安装的是最新版
sudo yum install docker-ce docker-ce-cli containerd.io -y

在这里插入图片描述
最后启动docker并将其加入开机启动

systemctl start docker
systemctl enable docker

3.配置docker阿里云镜像地址并使用systemd来代替cgroupfs

sudo tee /etc/docker/daemon.json <<-'EOF'
{
 "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://你自己的.mirror.aliyuncs.com"]
}
EOF
#重启docker
systemctl restart docker

4.k8s基础组件安装
配置k8s阿里云镜像

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装k8s基础组件,在此安装最新版:

#查看可安装的版本
yum list kubelet kubeadm kubectl  --showduplicates|sort -r
#安装最新版
yum install kubectl kubelet kubeadm -y
#安装完成后版本检查
kubeadm version
kubectl version
kubectl version --short=true
kubelet --version
#将kubelet加入开机启动
systemctl enable kubelet

配置kubelet的cgroup

vi /etc/sysconfig/kubelet
#添加以下内容
KUBELET_EXTRA_ARGS=
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

5.查看所需镜像可以通过下面命令查看

kubeadm config images list

在这里插入图片描述
6.(方式1,提前下载好需要镜像)定义一个待下载的镜像数据集,所有服务器都要下载该镜像

images=(
kube-apiserver:v1.20.1
kube-controller-manager:v1.20.1
kube-scheduler:v1.20.1
kube-proxy:v1.20.1
pause:3.2
etcd:3.4.13-0
coredns:1.7.0
)

for循环下在并使用docker tag命令标记本地镜像,将其归入谷歌仓库

for imageName in ${images[@]} ; do 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName 
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
done

若不提前做如此转换也可在初始化k8s集群时指定镜像地址
参考:使用kubeadm在Centos8上部署kubernetes1.18
7.k8s集群初始化

kubeadm init \
--kubernetes-version=v1.20.1 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.56.105

(方式2,初始化时指定阿里云仓库)

kubeadm init \
--kubernetes-version=v1.20.1 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.56.105 \
--image-repository registry.aliyuncs.com/google_containers \
--ignore-preflight-errors=all

执行后报如下错误

[root@master01 ~]# kubeadm init \
> --kubernetes-version=v1.20.1 \
> --pod-network-cidr=10.244.0.0/16 \
> --service-cidr=10.96.0.0/12 \
> --apiserver-advertise-address=192.168.56.105
[init] Using Kubernetes version: v1.20.1
[preflight] Running pre-flight checks
        [WARNING FileExisting-tc]: tc not found in system path
        [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.2. Latest validated version: 19.03
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
[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

错误的意思是,20.10.2版本docker未做验证,已验证的最高版本为19.03
解决1:降低docker版本至指定版本
解决2:忽略所有版本检查,修改后命令如下:

kubeadm init \
--kubernetes-version=v1.20.1 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.56.105 \
--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

在这里插入图片描述
参考博客:使用kubeadm建立kubernetes集群
在node机上将node节点加入到master集群种(自己根据自己集群提示加入,以下为我本次试验机):

kubeadm join 192.168.56.105:6443 --token asfqrj.hg9jqw71wop8qhhg \
    --discovery-token-ca-cert-hash sha256:d4614a6d5457ed9e634758e004442ebb3542f89a714888cb8a0387d99eda8d28

加入完查看集群节点信息:
在这里插入图片描述
8.安装集群网络插件
查看k8s官方支持的网络插件:
k8s网络插件
这里选择flannel
flannel
运行安装:

#方式1
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#方式2,下载后安装
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f kube-flannel.yml```

运行成功如下稍等片刻:
在这里插入图片描述
查看集群状态如下表示成功:
在这里插入图片描述
安装网络插件可能出现的错误及解决办法:
在这里插入图片描述
此时需要修改hosts,重新定义raw.githubusercontent.com映射的ip
ip查看:
ipaddress
在这里插入图片描述
修改hosts,添加:
199.232.96.133 raw.githubusercontent.com
重新运行即可:
备用ip查询选中国香港(我这里不能连,只能使用上面的方法):
IP38

至此k8s单节点集群已搭建成功
可能遇到的问题与解决办法:
quay.io/coreos/flannel:v0.13.1-rc1镜像下载失败,正常情况下kube-system空间中的所有pod都应该处于运行状态:
在这里插入图片描述
如果网络插件未安装成功,所有节点将储于notready状态。
镜像下载不了可更换镜像下载仓库:
在这里插入图片描述

#仓库1
sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml
#仓库2
sed -i 's/quay.io/quay.azk8s.cn/g' kube-flannel.yml

如果都不行,就只能自己下载好镜像自己导入到待安装的机器中了

#从已有的镜像中导出
docker save -o flannel2.tar quay.io/coreos/flannel:v0.13.1-rc1
#从tar文件中导入
docker load -i flannel2.tar

(注意:手动导入的镜像,每个安装节点都需要导入)

9.下面部署一个应用进行集群测试

kubectl create deployment nginx --image=nginx:alpine
kubectl scale deployment nginx --replicas=2
#查看应用状态
kubectl get pods -l app=nginx -o wide
#暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
#查看service
kubectl get services nginx

在这里插入图片描述
此时尝试通过节点ip加端口访问,发现访问不到,此时进入道node节点进行访问,报如下错误
在这里插入图片描述
解决办法:

#主节点复制该文件到所有的子节点
 scp /etc/kubernetes/admin.conf root@slave02:/etc/kubernetes/
 #再在子节点执行以下命令
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

此时在子节点尝试访问,发现可以访问成功,然后使用浏览器进行访问,也可访问成功,但是有时候有不能访问的情况,具体原因还没有往下深究。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值