centos 7 部署k8s集群

部署规划

192.168.197.200docker200
192.168.197.201docker201
192.168.197.202docker202

 

 

 

 

1.关闭防火墙并设置开机关闭

[root@docker200 ~]# systemctl stop firewall
[root@docker200 ~]# systemctl disable firewall

2.关闭selinux

selinux是inux下的一个安全机制,主要是对文件系统访问做一个权限控制,这个权限控制会影响到kubernetes中的一个组件kuberlete的安装,因为这个组件的安装会访问本地的文件操作系统

临时关闭

[root@docker200 ~]# setenforce 0

永久关闭

修改 /etc/selinux/config 文件,更改为 SELINUX=disabled

3.禁止swap分区

swap分区的作用是当物理内存不足时,利用swap分区做数据交换,但是在kubernetes中完全不支持swap分区,所以必须禁止掉,或者创建系统的时候就不创建他

临时关闭

[root@docker200 ~]# swapoff -a 

查看swap是否关闭了

[root@docker200 ~]# free

永久关闭

修改 /etc/fstab 配置文件,注释掉下图画圈部分

4.设置主机名及ip对应关系

修改主机名

使用下方指令来修改主机名,修改好后重新登录就会显示设置好的主机名,这里我是已经修改过的了

[root@docker200 ~]# hostnamectl set-hostname docker200

修改host文件

执行下方指令,会往host文件添加相关配置

[root@docker200 ~]# cat >> /etc/hosts << EOF
> 192.168.197.200  docker200
> 192.168.197.201  docker201
> 192.168.197.202  docker202
> EOF

5.验证mac地址uuid

保证各个接点mac地址和uuid唯一

[root@docker200 ~]# cat /sys/class/net/ens33/address
[root@docker200 ~]# cat /sys/class/dmi/id/product_uuid 

6.开始时间同步

保证这个接点时间是相同的,这里使用的是chronyd,相关配置可以搜索其他文章,这里不多做介绍

7.将桥接的IPv4流量传递到iptables的链

有一些ipv4的流量不能走iptables链,lnux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,导致流量丢失

配置k8s.conf文件(k8s.conf文件原来不存在,需要自己创建的)

[root@docker200 ~]# cat > /etc/sysctl.d/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF

使k8s.conf文件立即生效

[root@docker200 ~]# sysctl --system

8.添加阿里云YUM软件源

我们是通过yum进行安装,添加阿里云的k8s的软件源后,下载的速度会快

配置 kubernetes.repo (kubernetes.repo原来不存在,需要我们创建的)

[root@docker200 ~]# cat > /etc/yum.repos.d/kubernetes.repo << EOF
> [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




[] 中括号中的是repository id,唯一,用来标识不同仓库
name 仓库名称,自定义
baseurl 仓库地址
enable 是否启用该仓库,默认为1表示启用
gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证
repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证
gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了

更新缓存

[root@docker200 ~]# yum clean all
[root@docker200 ~]# yum -y makecache

9.安装docker

由于之前的文章已经介绍过如果安装,这里就不多做介绍

10.安装kubeadm,kubelet、kubectl

安装之前,要去查询下之前安装好的docker版本对应的k8s版本,我这里的docker版本是19.03,所以我使用k8s的版本是1.17.2

[root@docker200 ~]# yum install -y kubelet-1.17.2 kubeadm-1.17.2 kubectl-1.17.2



kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
kubeadm 用于初始化集群,启动集群的命令工具
kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

安装的时候,有可能会出现xxx.rpm 由于公钥的原因无法安装,如下图,可以使用--nogpgcheck 命令格式跳过公钥检查

[root@docker200 ~]# yum install kubeadm-1.17.2-0.x86_64 --nogpgcheck

启动kubelet并设置开机启动

[root@docker200 ~]# systemctl enable kubelet && systemctl start kubelet

kubelet命令补全 

[root@docker200 ~]# echo "source <(kubectl completion bash)" >> ~/.bash_profile
[root@docker200 ~]# source .bash_profile 

11 部署Kubernetes Master

11.1 初始化 mastere节点

kubeadm init \
--apiserver-advertise-address=192.168.197.200 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.2 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16


apiserver-advertise-address指定master的interface,
image-repository  镜像地址 使用阿里云的镜像地址
kubernetes-version v1.17.2  k8s版本号
service-cidr  指定服务网络范围
pod-network-cidr指定Pod网络的范围,这里使用flannel网络方案。

 执行完上述命令后安装成功会出现以下下信息,为node节点加入到集群中使用的token

kubeadm join 192.168.197.200:6443 --token mel8ax.6usyyf9nngbzxcgj \
    --discovery-token-ca-cert-hash sha256:b0d9149250cee0eade6e629af8985a2b9bbf96bdc160bed34941da3367597b4b

11.2 配置kubectl 

配置完下方执行后,可以执行kubectl get node 得到节点信息

[root@docker200 ~]# mkdir -p $HOME/.kube
[root@docker200 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@docker200 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config  

11.3安装Pod网络插件(CNI)

我们这里使用flannel当作网络插件,由于在线安装不一定成功,网址有可能被墙,导致无法访问,我们可以先把flannel的镜像拉去下来,在执行相关配置

在线安装

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

手动安装

docker pull easzlab/flannel:v0.11.0-amd64    #拉取镜像

 wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml  #下载配置文件

kubectl apply -f kube-flannel.yml  #执行安装

手动安装成功后,可以使用kubectl get pods -n kube-system进行检查是否安装成功

12.Node节点加入集群

12.1 部署node环境

在docker201和docker202机器上,分别执行上述1~10.

12.2 node加入集群

在执行初始化master节点时,会有下方指令显示出现,在node节点上执行上述执行即可加入集群

kubeadm join 192.168.197.200:6443 --token mel8ax.6usyyf9nngbzxcgj \
    --discovery-token-ca-cert-hash sha256:b0d9149250cee0eade6e629af8985a2b9bbf96bdc160bed34941da3367597b4b

看见下图,则是node集群加入成功

12.3 node加入集群异常

1.执行上述执行,没有看到Run "kubectl get nodes"的描述

a.先排查node机器与master机器时间是否一致,不一致则执行时间同步

b.在master机器上执行kubeadm token list 查看token是否过期

c.若是token过期或者忘记token了,可以执行下方执行,生成一个新的token,获取ca证书sha256编码hash值

kubeadm token create  #生成新的token


#获取ca证书
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null |    openssl dgst -sha256 -hex | sed 's/^.* //'

2.节点加入集群后,在master上执行kubectl get node ,节点的状态是NotReady

a.在node节点机器上执行 journalctl -f -u kubelet  查看日志,如下图,是网络出了问题

b.在master节点上执行 kubectl get pods -n kube-system 发现是flannel镜像拉取卡主了

c.在master上删除节点后,在node机器上手动拉取flannel镜像

#master删除节点
kubectl delete node docker201

kubectl delete node 节点名称



#node重置
kubeadm reset 


#node拉取镜像
docker pull easzlab/flannel:v0.11.0-amd64

#node加入集群
kubeadm join 192.168.197.200:6443 --token vyjfer.gmx0wouba7e0l1gu     --discovery-token-ca-cert-hash sha256:b0d9149250cee0eade6e629af8985a2b9bbf96bdc160bed34941da3367597b4b 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值