2.17 安装部署主控节点服务–etcd
现在安装k8s master节点服务,首先要安装ETCD
在12,21,22上安装
做etcd前,先签发证书,因为etcd本身通信也要ssl。
在200上创建基于根证书的config配置文件
peer段是互相通信,服务端找客户端需要证书,客户端找服务端也需要证书/。client段就是客户端找服务器要证书,服务器找客户端不需要。server段,启动server段要配置证书,client链接server要给证书。peer两端都需要
还需要创建etcd证书请求的文件
最主要是host段,其余跟ca一样,host段,是etcd要部署在哪些主机上,不支持网段,只能用ip。可以把csr文件修改,就重新签发,它会把文件弄到启动文件里重启
etcd3个节点要互相通信,所以用-profile=peer
一样也是管道给生成文件
现在12上安装etcd
首先需要创建一个用户
下载etcd
建议使用比较稳定的3.1版本etcd
解压到opt
改名版本号,创建软连接,方便以后升级etcd
最重要的就这两个文件,启动工具和命令行工具
先创建三个目录,然后把certs拷贝过来,启动etcd需要三个证书,CA证书,etcd-peer私钥,etcd-peer证书
拷贝etcd-peer
私钥的权限是600,证书可以看,私钥绝对不能给人看
cert弄好了就要创建etcd启动文件,有一个etcd-server-setup脚本
etcd数据放在哪
内部互相通信2380
外面的人和你通信用2379
后端客户端配额
证书地址
需要验证证书
给一个执行权限
修改所属所主
要把etcd作为一个后台进程,就需要依赖一个软件supervisor,是管理后台进程的软件
创建supervisord启动文件
创建这个配置文件
类似msql的my.cnf
执行的命令
用一个进程即可
自动启动,自动重启
进程启动多长时间才起来
判定三次重启
异常退出状态码
停止信号
配置标注错误输出,标准输出重定向到文件里
起来了可以查看日志
现在就起来了
必须监听了2379和2380两个端口才算成功
现在开始安装21
解压到opt目录
useradd -M是不加目录
把ca证书拷贝过来
现在去创建etcd的启动文件
修改成21
创建一些目录
修改权限
安装supervisor
注意这里是21
现在就监听起来了
做下一台22
创建用户
创建目录,拷贝证书
记得改成22
修改属主和属组
21上的状态是running
任意节点可以用etcdctl检测集群的健康状态
还有一种检查方法,isleader代表7-12是leader,其他都死跟班
2.18 安装部署主控节点服务–apiserver
下面安装k8S主控节点的apiserver,根据计划是安装在21和22
这个是go语言源码需要编译,要go环境编译成包
不想下载源码就点击这里
去下载这个,但是需要科学上网的方式
现在21上安装,获取k8s 1.15.2
k8s本身并不大,打完包才400M
解压,重命名,制作软连接
这里面就是go语言的源码包,可以删除
tar是docker镜像
不用kubeadmin,这些镜像是不要的,可以删除
暂时用到的就这些
部署kube-apiserver,也需要签发证书,这个client证书就是apiserver和etcd通信要用到的证书,在这个通信中,apiserver是client端,etcd是server端
签发证书的命令是cfssl gencert
client证书就做出来了,apiserver链接etcd需要证书
要给apiserver签发一个server证书,server证书是apiserver对外提供服务的,也要走ssl,要做一个csr,证书签发请求文件
有一个vip,7.10
client是我要拿这个client证书找你通信。,etcd签发是peer,现在apiserver作为client端要和etcd通信,所以签发一个client证书和etcd通信。
还需要签发server证书,因为server启动的时候需要把证书加载进来,别人拿客户端证书找你通信
现在有两套证书,client,apiserver。
apiserver要和etcd通信,需要client证书,apiserver自己启动要apiserver证书
注意没s
把证书拷贝到21
6张证书和私钥
然后创建k8s apiserver启动的配置文件
要把审计的配置文件放进来,这是k8s资源配置清单,专门给k8s做日志审计用的,是apiserver启动必须带的配置
本身就是二进制执行文件
–help有很多参数
所以也跟etcd一样,给一个启动脚本
apiserver启动文件
apiserver的数量
日志审计的policy规则
健全模式RBAC,基于角色的访问控制
如果对某一行不明白可以查帮助,比如target-ram-mb
创建apiserver启动文件
不创建目录启动会有问题
现在开始装22
现在就起来了,顺便下载k8s-server软件包
修改名字,制作软连接
删除不必要的镜像
创建cert和conf,把证书拷贝到cert
这是日志审计配置
**配置好了,就去创建k8s的apiserver的启动文件 **
加上执行权限
这里需要换成22
创建目录才能启动
21起来了
22也起来了
apiserver是用root起的,etcd是用普通用户启动的
2.19 安装部署主控节点L4反代服务
现在要做这一步,把proxy起来做4层反向代理
之前的apiserver监听是在本地回环地址8080端口,一个是监听6443端口
所以要做一个代理节点,keepalived 跑vip,用10.4.7.10的7443端口,vip反代apiserver的6443端口
在11 和12上安装nginx
安装好nginx后,配置4层反向代理
配置主控文件
stream是4层反代,不能放在http段里
放在最后
12也是一样
现在可以把nginx启动了,-t检查下配置
然后安装keeepalived,调整好vip,7443在两个节点飘起来
做一个keepalived分清监控的脚本
自己keepalied,监听脚本,如果7443端口宕机了,再去飘vip
执行权限
创建一个脚本,把7443传进来
配置文件略有区别
7443没了才去飘vip
vip跑到12这里了
就出来了
上面nginx停了,vip就会飘到这里来
nopreempt这个是非抢占式,因为在生产商网络短路的原因,探测7443端口不存在,vip只要在生产上动一次事故,就是重大安全事故,所以非抢断机制
两个都重启后就是11
2.20 安装部署主控节点控制器/调度器服务
安装主节点两个重要服务主控节点控制器/调度器服务,controller-manager/kube-scheduler
创建目录
加上执行权限
这里改一下22
update
部署kube-scheduler,跟controller-manager一样,启动脚本
这里是找本机所以不要ssl证书,21和22主控节点三个节点是一个整体,因为他们之间没有ssl证书的,这是生产上的经验,不用scheduler和controller-manager找apiserver,直接找本机即可,主控节点在三个不同的机器上就 需要通信上绕过这个证书
创建目录
controller-manager起来了
要去检查集群健康状态,需要用到kubectl工具,做一个软链接
kubectl get cs 是检查集群的健康状态
2.21 安装部署运算节点服务–kubelet
部署最复杂的服务,运算节点上的kubelet服务
第一件事,签发证书
kubelet本身也对外提供https服务,apiserver找它主动问节点上的一些信息,所以它自己要签发一套server证书,kubelet要签发一套自己server的证书,要把kubelet有可能用到的节点全列上
现在把证书请求文件做出来了,然后把证书做出来-bare 前缀是kubelet
前缀是kubelet
把kubelet的证书拷贝过来
要给kublet创建config文件,需要四步,setcluster,setcredentials,3.setcontext,4.usecontext
创建的kublet.kuberconfig都是在conf下,是相对路径
第一个指的是CA跟证书,指定进来
embed-certs是一个承载式证书。
跟apiserver通信 的时候,就可以走vip 10.4.7.10:7443。配置的目的就是给kubelet做一个k8s用户,k8s用户体系比较复杂,普通用户,服务用户。普通用户和apiserver的时候需要一个接入点就是10.4.7.10:7443.
kubelet去找vip或者找apiserver
二进制部署安装就需要这么做
这个ca进来了
其实经过base64编码
可以比较下
其实就是把CA证书嵌入到config配置文件里了,启动kubelet的时候,要指明config,重启kubelet就好了,
第二步,把client-key.pem和client.pem进来了,apiserver是服务端, 拿客户端秘钥去和你通讯,client证书通用,因为不管是client证书和ca镇湖这么数据长,因为都是一套签发来的了。
client证书实际上通用少,一般因为一套ca证书签发来的,都可以使用*
set-context有个比较重要 ,–user=k8s-node,然后切换context上下文
要给这个k8s-node,用rpc规则设定执行权限,具有集群里作为运算节点的权限
现在要做角色绑定
rpc鉴权也是一种资源,有roleref和subjects,
做了集群角色绑定
让k8s-node这个用户,具有集群角色绑定,这个集群角色叫system:node。
创建了一个k8s用户,叫做k8snode,在k8snode上授予一个集群权限,让这个用户k8snode成为运算节点的节点,具有运算节点的权限
定义了一个clusterrolebinding,一个集群角色绑定的资源,k8s的一切皆资源,定义了资源 名字叫node,给k8s-node的集群用户绑定了一个集群角色clusterrole,这个集群角色叫system:node,意思是绑定了集群角色,让k8s-node用户具备成为这个集群里运算节点的权限
创建一个k8s的资源,放在etcd里了,不管是在哪个节点起来,就已经把这个资源创建出来,所以创建一遍就可以了,
不然还需要重来4遍,setcluster,setcredentials,3.setcontext,4.usecontext,所以现在方便就拷贝过来
做了两件事,第一件事做了一个kubeconfig的配置文件,第二就是create集群资源,这个集群资源已经在etcd里了,所以只需要一次创建资源的事情,set的过程就是做文件的过程,直接scp复制就好
如果再去create 就告诉你已经存在了
证书配置好了就可以做kubelet启动脚本
准备一个pause的镜像,kubelet启动的时候需要一个基础镜像来帮助我们启动pod。kubelet干脏活累活,是接收请求,scheduler调度后,调用docker引擎把容器pod拉起来,,拉容器的时候,必须有一个基础镜像。跟车模式,server是一个小镜像,kubelet能控制小镜像先于业务容器起来,帮业务容器去设置UTS,NET,IPC,小容器先把名称空间占着,以后业务容器起来的时候,pod的ip已经分配好了,所以需要一个pause基础镜像
打一个标签
私有仓库就有了,kubelet在启动的时候指定镜像,让所有业务容器启动的时候,这个pause容器,先于你的业务容器起来,因为你的pause太小了,只负责给业务容器初始化uts,net,ipc
下面可以启动kubelet服务
不允许匿名登录
docker是systemd,要跟docker的cgroup-driver保持一致
kubelet起来的时候默认把运算节点上的swap关闭
这就是根证书
k8s作为服务端,需要的k8s证书和私钥
kubelet要用到这个镜像
创建supervisor的ini配置文件
创建ini文件
加到supervisortl里
现在去node节点看看有没有加到集群里,roles现在是空的
要用name名字
既做主节点又做运算节点
label只是一个标签,k8s可以根据标签来管理(加入生产,主控节点和运算节点,必须分开)主控节点装了kubelet,不想让主控节点运行kubelet,这时标签选择器给主控集结点,打一个污点,让别的容器访问u了
2.22 安装部署运算节点服务–kube-proxy
kube-proxy的用途主要是连结pod网络和集群网络,部署kube-proxy服务
先做签发证书的请求文件
签发证书,这个kube-proxy签发的client证书跟之前的并不通用
-bare前缀
安装一次k8s签发6套证书
CN对应的是K8S里的角色
**两种方式,要么你的cn的名字随便定,k8s-node的cn和system:node做binding。
现在cn里用的是角色名称,system:nod 和system:kube-proxy都是k8s里的角色。通过签发证书,默认kube-proxy用户拥有system:kube-proxy这个角色
**
复制到22上
创建配置,4个步骤
kubeconfig就是k8s用户的配置文件
复制到22上
创建启动脚本
kube-proxy有三种调度模式:userspace废弃,iptables,建议用ipvs
现在就把ipvs相关模块加载进来了
这样kubeproxy就能用到ipvs调度方法了
ipvs加载了很多算法
加权轮循
加权最少链接
4个静态,6个动态
这4种在CDN服务上用的比较多
最长用的sed
nq基于sed算法之下,永不排队
创建目录
默认启用ipvs proxier
ipvsadm可以看到反代的地址,把clusterip和node ip绑定了
kube-proxy就维护了这三台关系
看到ipvs结果就看到组件成功了
2.23 验证集群
验证集群使用一个nginx服务
创建一个资源配置清单,使用之前的harbor有Nginx镜像,去给这个集群创建daemonset型的装饰器,去看看集群是否正常
能访问1但是2访问不到,原因是docker跨宿主机不能通信,需要flannel来解决
这样才算完成