因为文章太长了,所以博主分了三节来讲
七、服务器编排(集群开发)
Kubernetes
在安装Kubernetes集群的时候,博主真的是遇到了很多的坑,甚至一度怀疑人生
首先我们要知道安装集群都需要哪些东西
- kubelet
运⾏于所有 Node上,负责启动容器和 Pod - kubeadm
负责初始化集群 - kubectl
k8s命令⾏⼯具,通过其可以部署/管理应⽤以及CRUD各种资源
你以为到这就结束了?? No!No!No!!!
//它们还有一些依赖
conntrack-tools
cri-tools
kubernetes-cni
libnetfilter_cthelper
libnetfilter_cttimeout
libnetfilter_queue
需要注意的是kubernetes-cni
这个接口坑了博主一下午,这个坑我们下面再说,我们先了解一下Kubernetes集群。
步骤
要形成集群就是要服务器直接可见,也就是暴露给外网
还要需要互相可以连接,所以我们要关闭防火墙还要关闭selinux
所有节点
关闭防火墙、关闭selinux
//禁用防火墙
systemctl disable firewalld.service
//关闭防火墙
systemctl stop firewalld.service
//关闭selinux
setenforce 0
//在配置文件中修改selinux的状态
vi /etc/selinux/config
//把SELINUX=enforcing 改为SELINUX=disabled
SELINUX=disabled
这里博主需要说明的是 selinux 有三个状态
- enforcing
enforcing 是在selinux规则之外的所有操作都会被禁止 - permissive
permissive 是在selinux规则之外的操作系统会提出警告但是并不会禁止 - disabled
disabled 就是禁用掉selinux 这样的话你的所有操作不受selinux规则的影响也不会提出警告
/禁用swap
//禁用swap
[root@Joliu ]# swapoff -a
如果不禁用swap 开启服务的时候会出如下错误
[preflight] Running pre-flight checks
[preflight] Some fatal errors occurred:
[ERROR Swap]: running with swap on is not supported. Please disable swap
设置主机名
设置你的虚拟机主机名,因为博主要配置一个多节点,1主2从
所以分别在三台虚拟机上执行下面的命令
这里有一个需要注意的是,如果你先安装的是RabbitMQ,未设置用户名可能会服务开始失败,其中有一个原因就是主机名不能全为数字
//主
hostnamectl --static set-hostname k8s-master
//从1
hostnamectl --static set-hostname k8s-node-1
//从2
hostnamectl --static set-hostname k8s-node-2
加入host解析,相互直接可以识别
//编辑/etc/hosts
vi /etc/hosts
//在文件末尾加入 k8s-master为对应的主机名
主节点ip地址 k8s-master
从节点1ip地址 k8s-node-1
从节点2ip地址 k8s-node-2
通过repo获取源
根据官网创建一个repo
vi /etc/yum.repos.d/kubrenetes.repo
//写入
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
//这就是哪个kubernetes-cni的坑
//kubelet的版本需要与之对应的kubernetes-cni的版本
正在解决依赖关系
--> 正在检查事务
---> 软件包 kubeadm.x86_64.0.1.13.1-0 将被 安装
--> 正在处理依赖关系 kubernetes-cni >= 0.6.0,它被软件包 kubeadm-1.13.1-0.x86_64 需要
---> 软件包 kubectl.x86_64.0.1.13.1-0 将被 安装
---> 软件包 kubelet.x86_64.0.1.13.1-0 将被 安装
--> 正在处理依赖关系 kubernetes-cni = 0.6.0,它被软件包 kubelet-1.13.1-0.x86_64 需要
--> 正在检查事务
---> 软件包 kubelet.x86_64.0.1.13.1-0 将被 安装
--> 正在处理依赖关系 kubernetes-cni = 0.6.0,它被软件包 kubelet-1.13.1-0.x86_64 需要
---> 软件包 kubernetes-cni.x86_64.0.0.8.6-0 将被 安装
--> 解决依赖关系完成
错误:软件包:kubelet-1.13.1-0.x86_64 (kubernetes)
需要:kubernetes-cni = 0.6.0
可用: kubernetes-cni-0.3.0.1-0.07a8a2.x86_64 (kubernetes)
kubernetes-cni = 0.3.0.1-0.07a8a2
可用: kubernetes-cni-0.5.1-0.x86_64 (kubernetes)
kubernetes-cni = 0.5.1-0
可用: kubernetes-cni-0.5.1-1.x86_64 (kubernetes)
kubernetes-cni = 0.5.1-1
可用: kubernetes-cni-0.6.0-0.x86_64 (kubernetes)
kubernetes-cni = 0.6.0-0
可用: kubernetes-cni-0.7.5-0.x86_64 (kubernetes)
kubernetes-cni = 0.7.5-0
正在安装: kubernetes-cni-0.8.6-0.x86_64 (kubernetes)
kubernetes-cni = 0.8.6-0
您可以尝试添加 --skip-broken 选项来解决该问题
您可以尝试执行:rpm -Va --nofiles --nodigest
快捷安装指定版本
博主带你一个命令解决
如果要安装1.13.1的版本直接复制执行下面这条命令
yum install -y kubelet-1.13.1 kubeadm-1.13.1 kubectl-1.13.1 kubernetes-cni-0.6.0
如果要安装最新版本 直接复制执行下面这条命令
yum install -y kubelet-1.18.5 kubeadm-1.18.5 kubectl-1.18.5 kubernetes-cni-0.8.6
安装完成后设置开机自启
//开机自启
systemctl enable kubelet
//开启
systemctl start kubelet
初始化集群(这里博主演示的是1.13.1版本的)
打上tag 用于解决源不能访问的问题,因为docker源 在国内是无法访问的。
pull
[root@Joliu ~]# docker pull mirrorgooglecontainers/kube-apiserver:v1.13.1
[root@Joliu ~]# docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.1
[root@Joliu ~]# docker pull mirrorgooglecontainers/kube-scheduler:v1.13.1
[root@Joliu ~]# docker pull mirrorgooglecontainers/kube-proxy:v1.13.1
[root@Joliu ~]# docker pull mirrorgooglecontainers/pause:3.1
[root@Joliu ~]# docker pull mirrorgooglecontainers/etcd:3.2.24
[root@Joliu ~]# docker pull coredns/coredns:1.2.6
[root@Joliu ~]# docker pull registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64
[root@Joliu ~