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
(2)每个节点修改内核参数
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
(3)指定docker的启动方式为systemd,这是因为docker默认的启动方式为cgroup,而k8s的启动方式为systemd
(4)每个节点禁用swap分区
2.保证每台虚拟机都可以上网【打开iptables桥接功能及路由转发】。
三、配置k8s群集
1、部署下载k8s的yum源
(2)所有节点安装k8s的工具
(3)启动并设置为开机自动开启
(4)查看默认配置信息
kubeadm config print init-defaults
默认从k8s.gcr.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库:
(5)列出所需的镜像
(6)从阿里云上拉取所需的镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
(7)将拉取到的镜像上传到私有仓库【方便集群的从节点可以快速拉取所需的镜像】
由于habor仓库开启了认证,故server2、server3、server4需要认证
注:我的habor仓库的客户认证在/etc/docker/certs.d/westos.org/ca.crt
添加解析——每个节点都要添加解析
【第一次搭建,从节点无法拉取到镜像,就是这个错误导致的】
将拉取到的镜像修改为私有仓库,并上传带私有仓库
先登录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安装版本
建立用户
3、从节点加入master的集群
kubeadm join --token b3a32e.7cef20447b55261e 172.25.0.11:6443 --discovery-token-ca-cert-hash sha256:bc718df41fdceb0db6c5380c7e27c204589b41dcb5f9a3bc52c254b707377f2f
4.查看集群的节点
5、安装flannel网络组件注:下载这个二进制文件后,会在本地拉取到一个flannel镜像
https://github.com/coreos/flannel
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
6、其他的从节点会自动拉取所需的镜像
注:
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
到这里我们的k8s平台就拉建好了
四、当主节点的token失效了,怎么办
模拟实验:
当server4出现故障,并被集群踢出集群
可以执行token list ,重新生成一个token
再次连接
再次查看集群状态