您的位置:首页 > 运维架构 > Linux

Centos安装k8s集群全过程记录!!!

2020-07-04 15:03 148 查看

本地安装三台centos7.8虚拟机用来安装k8s集群,选用的版本是1.18.5,由于国内的环境,所以安装起来比较麻烦,这里记录一下安装过程,真是太难了…

安装准备

我们在正式安装之前进行如下操作
1、需要保证每个主机名不一样,如果一样,需要修改

# 修改名字为master
hostnamectl set-hostname master

# 重启
reboot

1、在所有虚拟机上关闭防火墙

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

2、在所有虚拟机上关闭swap

# 查看swap分区,没有就算了
free -b
swapoff  -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

3、在所有虚拟机上关闭selinux

getenforce
setenforce 0

好了,接下来就可以安装了

安装docker

所有的虚拟机上都要安装docker
1、移除原有的docker

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、设置yum仓库

yum install -y yum-utils

yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker

yum install docker-ce docker-ce-cli containerd.io

4、设置国内的镜像源,因为官方的镜像源下载太慢了,这里我用的阿里的镜像加速服务,你也可以用其它的镜像源

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["自己的镜像源"]
}
EOF

5、启动docker

systemctl start docker

安装k8s集群

1、在所有虚拟机上设置yum仓库,这里我依然选择阿里的仓库

vim /etc/yum.repos.d/kubernetes.repo

[kuebrnetes]
name=Kubernetes Repository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

2、在虚拟机上安装kubectl、kubeadm、kubelet

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernete

3、在部署之前,我们需要在master节点上查看一下需要哪些镜像

[root@master ]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.18.5
k8s.gcr.io/kube-controller-manager:v1.18.5
k8s.gcr.io/kube-scheduler:v1.18.5
k8s.gcr.io/kube-proxy:v1.18.5
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

3、在master节点,下载镜像,由于谷歌官方的镜像网站被墙,真是太惨了,我们需要通过docker曲线救国

docker pull mirrorgcrio/kube-apiserver:v1.18.5
docker pull mirrorgcrio/kube-controller-manager:v1.18.5
docker pull mirrorgcrio/kube-scheduler:v1.18.5
docker pull mirrorgcrio/kube-proxy:v1.18.5
docker pull mirrorgcrio/pause:3.2
docker pull mirrorgcrio/etcd:3.4.3-0
docker pull mirrorgcrio/coredns:1.6.7

docker tag mirrorgcrio/kube-apiserver:v1.18.5 k8s.gcr.io/kube-apiserver:v1.18.5
docker tag mirrorgcrio/kube-controller-manager:v1.18.5 k8s.gcr.io/kube-controller-manager:v1.18.5
docker tag mirrorgcrio/kube-scheduler:v1.18.5 k8s.gcr.io/kube-scheduler:v1.18.5
docker tag mirrorgcrio/kube-proxy:v1.18.5 k8s.gcr.io/kube-proxy:v1.18.5
docker tag mirrorgcrio/pause:3.2 k8s.gcr.io/pause:3.2
docker tag mirrorgcrio/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag mirrorgcrio/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

docker image rm mirrorgcrio/kube-apiserver:v1.18.5
docker image rm mirrorgcrio/kube-controller-manager:v1.18.5
docker image rm mirrorgcrio/kube-scheduler:v1.18.5
docker image rm mirrorgcrio/kube-proxy:v1.18.5
docker image rm mirrorgcrio/pause:3.2
docker image rm mirrorgcrio/etcd:3.4.3-0
docker image rm mirrorgcrio/coredns:1.6.7

4、利用kubeadm安装master节点,这里我选用的是calico网络

kubeadm init --pod-network-cidr=192.168.0.0/16

等待一段时间以后,会输出token等信息,利用这个信息可以添加节点,master已经安装完毕

5、在本地安装的时候可能会出现这个问题,但是我在阿里云服务器上安装集群的时候就没出现这个问题

[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.

我的解决方案是:

vim  /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

# 在里面这一行后面加入即可,--cgroup-driver=cgroupfs
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=cgroupfs"

systemctl daemon-reload
systemctl restart kubelet

然后执行

kubeadm reset
还原,鬼知道我试了有多少次,接着执行第四步的命令

5、进行相应的配置工作

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config

6、安装calico网络插件,否则你的节点一直是NotReady状态

kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml

7、等待一段时间后,通过以下命令可以看到所有正在运行的pod

kubectl get pods --all-namespaces

8、设置master也作为一个node,可以安装pod

kubectl taint nodes --all node-role.kubernetes.io/master-

9、然后将其它两个节点加入集群,这个命令就是kubeadm init最后输出的信息,直接复制到相应的机器上就可以添加节点(每个人的都不一样,token的保质期只有24小时)

kubeadm join 192.168.128.132:6443 --token dqtj4v.vclq3txsz7q86ngy --discovery-token-ca-cert-hash sha256:676cff601eb10014a590fe86d701038def282a434670c190adac4839d1b58ccf

10、如果报错

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

可解决为

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

11、如果加入节点后,你会发现,节点一直是

NotReady
状态,这个时候很大原因就是网络原因,calico和kube proxy和kube pase的镜像没有拉下来,所有我们还得自己手动拉取,真是太难了啊。。。

docker pull mirrorgcrio/pause:3.2
docker pull mirrorgcrio/kube-proxy:v1.18.5
docker pull calico/cni:v3.10.4
docker pull calico/node:v3.10.4
docker pull calico/pod2daemon-flexvol:v3.10.4

docker tag mirrorgcrio/pause:3.2 k8s.gcr.io/pause:3.2
docker tag mirrorgcrio/kube-proxy:v1.18.5 k8s.gcr.io/kube-proxy:v1.18.5

docker image rm mirrorgcrio/kube-proxy:v1.18.5
docker image rm mirrorgcrio/pause:3.2

12、最后我们先

kubeadm reset
,然后重新加入就可,我们查看一下

[root@master ~]# kubectl get node
NAME          STATUS   ROLES    AGE   VERSION
firstslave    Ready    <none>   76m   v1.18.5
master        Ready    master   83m   v1.18.5
secondslave   Ready    <none>   51s   v1.18.5

终于一个三节点的k8s集群可算是装好了,我们来测试一下是否可用

测试

我创建了一个deployment,部署了一个三副本的niginx,此时查看都是正常的,而且是每个节点拥有一个pod,这里比较简单,网上随便找一个就好

总结

到此为止,一个三节点的k8s算是彻底创建好了,如果你的网络能上谷歌,那么就会轻松很多

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: