k8s是Kubernetes的简称,因为K和S之间有8个字母,所以才会被称为k8s。

k8s最初是在Google公司内部使用了10多年的技术,它的前身是叫做Borg(博格),直到2015年才被Google公司捐赠为开源项目。

如果之前我们有接触过OpenStack,那么应该知道管理VM虚拟机资源可以用OpenStack。那么管理容器所对应的开源平台是什么呢?k8s就是其中之一,在k8s之前也有很多容器管理平台,有docker自身的docker swarm,也有apache推出的Mesos等等。相比较而言,虽然k8s比其他推出的晚了些,但是丝毫不影响其火爆程度。

关于k8s更详细的介绍,可以移步至k8s中文文档或者k8s官方网站 ,以便查看更多资料

一、环境准备

172.25.254.2

集群master

172.25.254.3

集群slave

172.25.254.4

集群slave

172.25.254.6

habor仓库

上述四台虚拟机,均运行docker服务,如果是测试环境,那么master节点和habor仓库的虚拟机内存最少2G,CPU至少双核。

二、部署前准备

1、检查docker版本、关闭防火墙及Selinux、清空iptables规则、禁用Swap交换分区
注:以下操作需要在三台docker主机上分别配置一次,哪怕是在生产环境,都需要进行以下操作,因为k8s有它自己的安全策略。

[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
#关闭Selinux
[root@master ~]# setenforce 0    
[root@master ~]# vim /etc/sysconfig/selinux 
SELINUX=disabled          #将此处改为disabled
[root@master ~]# iptables -F    #清空iptables规则
#重启docker服务
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
#禁用swap交换分区
[root@master ~]# swapoff -a   #临时禁用swap
[root@master ~]# vim /etc/fstab     #打开自动挂载的配置文件,将swap配置项注释掉
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0
#就注释掉上面那行
[root@node02 ~]# mount -a    #重新加载挂载的配置文件
[root@node02 ~]# free -h     #确认输出的swap行如下(都为0):

(1)

所有节点部署docker引擎
# yum install -y docker-ce docker-ce-cli

# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

# sysctl --system

# systemctl enable docker
# systemctl start docker

openstack k8s关系 openstack k8s区别_上传


openstack k8s关系 openstack k8s区别_上传_02


openstack k8s关系 openstack k8s区别_openstack k8s关系_03


(2)每个节点修改内核参数

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

openstack k8s关系 openstack k8s区别_openstack k8s关系_04


openstack k8s关系 openstack k8s区别_openstack k8s关系_05


openstack k8s关系 openstack k8s区别_vim_06


openstack k8s关系 openstack k8s区别_上传_07


openstack k8s关系 openstack k8s区别_docker_08


(3)指定docker的启动方式为systemd,这是因为docker默认的启动方式为cgroup,而k8s的启动方式为systemd

openstack k8s关系 openstack k8s区别_openstack k8s关系_09


openstack k8s关系 openstack k8s区别_上传_10


openstack k8s关系 openstack k8s区别_vim_11


(4)每个节点禁用swap分区

openstack k8s关系 openstack k8s区别_上传_12


openstack k8s关系 openstack k8s区别_上传_13


openstack k8s关系 openstack k8s区别_docker_14


2.保证每台虚拟机都可以上网【打开iptables桥接功能及路由转发】。

三、配置k8s群集

1、部署下载k8s的yum源

openstack k8s关系 openstack k8s区别_上传_15


(2)所有节点安装k8s的工具

openstack k8s关系 openstack k8s区别_vim_16


openstack k8s关系 openstack k8s区别_vim_17


openstack k8s关系 openstack k8s区别_openstack k8s关系_18


(3)启动并设置为开机自动开启

openstack k8s关系 openstack k8s区别_vim_19


openstack k8s关系 openstack k8s区别_vim_20


openstack k8s关系 openstack k8s区别_vim_21


(4)查看默认配置信息

kubeadm config print init-defaults

openstack k8s关系 openstack k8s区别_上传_22

openstack k8s关系 openstack k8s区别_上传_23


默认从k8s.gcr.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库: (5)列出所需的镜像

openstack k8s关系 openstack k8s区别_上传_24


(6)从阿里云上拉取所需的镜像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

(7)将拉取到的镜像上传到私有仓库【方便集群的从节点可以快速拉取所需的镜像】

由于habor仓库开启了认证,故server2、server3、server4需要认证

openstack k8s关系 openstack k8s区别_vim_25


注:我的habor仓库的客户认证在/etc/docker/certs.d/westos.org/ca.crt

添加解析——每个节点都要添加解析【第一次搭建,从节点无法拉取到镜像,就是这个错误导致的】

openstack k8s关系 openstack k8s区别_上传_26


将拉取到的镜像修改为私有仓库,并上传带私有仓库

openstack k8s关系 openstack k8s区别_上传_27

先登录habor仓库
docker login westos.org
登录成功后:在上传
docker push westos.org/library/etcd:3.4.3-0 ##以这个镜像为例

2、初始化k8s集群【在master上进行就可以了】

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository westos.org/library
--pod-network-cidr=10.244.0.0/16	//使用flannel网络组件时必须添加
--kubernetes-version 	//指定k8s安装版本

openstack k8s关系 openstack k8s区别_docker_28


建立用户

openstack k8s关系 openstack k8s区别_openstack k8s关系_29


openstack k8s关系 openstack k8s区别_vim_30


openstack k8s关系 openstack k8s区别_vim_31


openstack k8s关系 openstack k8s区别_docker_32


3、从节点加入master的集群

kubeadm join --token b3a32e.7cef20447b55261e 172.25.0.11:6443 --discovery-token-ca-cert-hash sha256:bc718df41fdceb0db6c5380c7e27c204589b41dcb5f9a3bc52c254b707377f2f

openstack k8s关系 openstack k8s区别_openstack k8s关系_33


4.查看集群的节点

openstack k8s关系 openstack k8s区别_上传_34

openstack k8s关系 openstack k8s区别_openstack k8s关系_35

5、安装flannel网络组件
注:下载这个二进制文件后,会在本地拉取到一个flannel镜像

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

6、其他的从节点会自动拉取所需的镜像

openstack k8s关系 openstack k8s区别_vim_36


注:

Master查看状态:
# kubectl get cs
# kubectl get node
# kubectl get pod -n kube-system

kubectl命令指南: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands补充:

配置kubectl命令补齐功能
echo "source <(kubectl completion bash)" >> ~/.bashrc

openstack k8s关系 openstack k8s区别_docker_37


openstack k8s关系 openstack k8s区别_openstack k8s关系_38


到这里我们的k8s平台就拉建好了

四、当主节点的token失效了,怎么办

模拟实验:

当server4出现故障,并被集群踢出集群

openstack k8s关系 openstack k8s区别_docker_39


可以执行token list ,重新生成一个token

openstack k8s关系 openstack k8s区别_docker_40


再次连接

openstack k8s关系 openstack k8s区别_openstack k8s关系_41


再次查看集群状态

openstack k8s关系 openstack k8s区别_docker_42