部署节点:
添加主机域名,业务域
主机域配置文件
业务域配置文件
所有主机都需要修改
测试访问外网
测试访问内网
部署主机:
证书签发工具CFSSL: R1.2
CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法
C: Country, 国家
ST: State,州,省
L: Locality,地区,城市
O: Organization Name,组织名称,公司名称
OU: Organization Unit Name,组织单位名称,公司部门
部署主机:,,.
这里以为例
部署主机:
harbor官网github地址:https://github.com/goharbor/harbor
DNS主机配置:
检查DNS解析
安装 nginx
配置 nginx
启动 nginx
默认登录名: 默认密码:
密码可以在harbor.yml中修改
创建新项目
1.下载测试镜像并打给镜像打一个tag
2.登录harbor仓库
3.上传镜像
4.web 页面检查
注意:这里部署文档以zzgw7-12.host.com主机为例,另外两台主机安装部署方法类似。
zzgw7-200主机上创建
创建基于根证书的config配置文件
证书类型
client certificate:客户端使用,用于服务端认证客户端,如etcdctl、etcd proxy、fleetctl、docker客户端
server certificate:服务端使用,客户端以此验证服务端身份,例如docker服务端、kube-apiserver
peer certificate:双向证书,用于etcd集群成员间通信
创建生成自签证书的签名请求(csr)的 json配置文件
生成证书
Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,
2、/etc/supervisord.d/etcd-server.ini
//修改supervisord启动ini文件的program标签,是为了更好区分主机,生产规范,强迫症患者的福音,不修改不会造成启动失败
任意节点
这里和使用nginx做4层负载均衡器,用keepalived跑一个vip:,代理两个kube-apiserver,实现高可用
这里以hdss21为例,另外一台运算节点部署方法类似
操作主机:
1. 创建生成证书签名请求(csr)的json配置文件
2. 生成client证书和私钥
3. 检查client证书和私钥
1.创建生成证书签名请求(csr)的json配置文件
2. 生成kube-apiserver证书和私钥
3. 检查kube-apiserver证书与私钥
下载地址:https://github.com/kubernetes/kubernetes/releases
k8s资源配置清单,专门给k8s做日志审计
zzgw7-22 跟上述基本相同
/etc/supervisord.d/kube-apiserver.ini
需要更改成[program:kube-apiserver-7-22]
操作主机:,。
俩个节点除了配置文件有所不同,其余配置完全一致。
部署nginx
安装nginx
配置nginx
启动nginx
部署 keepalive
安装keepalive
编写监控脚本
添加执行权限
配置keepalive(主)
配置keepalive(备)
启动keepalive
注意:这里部署文档以HDSS7-21.host.com主机为例,另外一台运算节点安装部署方法类似
zzgw7-22 跟上述基本相同
/etc/supervisord.d/kube-controller-manager.ini
需要更改成[program:kube-controller-manager-7-22]
注意:这里部署文档以zzgw7-21为例,另一运算节点类似
如果主控节点组件在不同的地方,是需要证书验证的('client-key.pem和client.pem'),实验环境是在一个宿主机,所以这里无需证书.
zzgw7-22 跟上述基本相同
/etc/supervisord.d/ kube-scheduler.ini
需要更改成[program:kube-scheduler-7-22]
注意:这里部署文档以 hdss7-21主机为例,另外一台运算节点安装部署方法类似
运维主机操作
创建生成证书签名请求(csr)的json配置文件
生成证书与私钥文件
只需在一个节点操作即可
set-cluster
set-credentials
set-context
use-context
查看生成的文件
只需在一个节点操作即可
1.创建资源配置文件
2.根据配置文件创建用户
3.查询集群角色
4.拷贝kubelet.kubeconfig 到zzgw7-22上
操作主机:
1.为什么需要这个pause基础镜像?
原因:需要用一个pause基础镜像把这台机器的pod拉起来,因为kubelet是干活的节点,它帮我们调度docker引擎,边车模式,让kebelet控制一个小镜像,先于我们的业务容器起来,让它帮我们业务容器去设置:UTC、NET、IPC,让它先把命名空间占上,业务容易还没起来的时候,pod的ip已经分配出来
2.下载pause镜像
3.提交至docker私有仓库(harbor)中
注意:kubelet集群各主机的启动脚本略不同,其他节点注意修改:--hostname-override
注意:其他主机部署时请注意修改program标签
其他节点类似,有些需要稍许调整:
/opt/kubernetes/server/bin/kubelet.sh
/etc/supervisord.d/kube-kubelet.ini
标签功能是特色管理功能之一
注意:这里部署以hdss7-21主机为例,其他运算节点类似
运维主机操作
创建生成证书签名请求(csr)的json配置文件
生成kubelet证书和私钥
检查证书与私钥
只需要在主机操作,再将生成的配置文件拷贝到各规划节点即可。
1.切换至conf目录
set-cluster
set-credentials
set-context
use-context
查看生成配置文件
拷贝kube-proxy.kubeconfig 到 zzgw7-22
查看ipvs模块是否开启
开启ipvs模块
检测ipvs模块是否开启
注意:其他主机部署时请注意修改该主机的主机名
注意:其他主机部署时请注意修改program标签
zzgw7-22 跟上述基本相同
/etc/supervisord.d/kube-proxy.ini
需要更改成[program:kube-proxy-7-21]
/opt/kubernetes/server/bin/kube-proxy.sh
需要改成 --hostname-override zzgw-22.host.com
问题:跨宿主机的pod资源,无法访问。
解决方案:通过CNI网络插件实现POD资源能够跨宿主机就行通信
注意:这里部署文档以zzgw7-21.host.com主机为例,另外一台运算节点安装部署方法类似
注意:lannel集群各主机的配置略有不同,SUBNET需要更改
启动flannel之前,需要在etcd中添加网络配置记录
host-gw:直接路由的方式,将容器网络的路由信息直接更新到主机的路由表中,仅适用于二层直接可达的网络
其他节点基本和相同,注意修改一下文件:
注意:iptables规则各主机的略有不同,其他运算节点上执行时注意修改。
安装iptables
优化SNAT规则,各运算节点之间的各POD之间的网络通信不再出网
10.4.7.21主机上的,来源是172.7.21.0/24段的docker的ip,目标ip不是172.7.0.0/16段,网络发包不从docker0桥设备出站的,才进行SNAT转换
删除拒绝所有的规则
各运算节点保存iptables规则
容器网络里坦诚相待,不需要遮掩
容器直接直接的访问,将会记录容器的IP地址,而不是宿主机的IP地址。
在运维主机上,配置一个nginx虚拟主机,用以提供k8s统一的资源配置清单访问入口。
操作
进入存放资源清单目录
rbac.yaml
configmap.yaml
deployment.yaml
service.yaml
检查资源配置清单
任意计算节点(zzgw7-21、zzgw7-22)
解析测试
容器中测试
ingress控制器
Traefik是一个用Golang开发的轻量级的Http反向代理和负载均衡器。由于可以自动配置和刷新backend节点,目前可以被绝大部分容器平台支持,例如Kubernetes,Swarm,Rancher等。由于traefik会实时与Kubernetes API交互,所以对于Service的节点变化,traefik的反应会更加迅速。总体来说traefik可以在Kubernetes中完美的运行.
官网yaml文件地址:https://github.com/containous/traefik/tree/v1.7/examples/k8s
创建并进入资源清单目录
rbac.yaml
daemonset.yaml
service.yaml
ingress.yaml
操作主机:
zzgw7-11和zzgw7-12两台主机上的nginx均需要配置
注:泛域名,访问任何业务域,会调用vip,分发流量至traefik81端口
创建并进入dashboard资源清单目录
rbac.yaml
deployment.yaml
service.yaml
ingress.yaml
注意:dashboardv1.8.3直接可以跳过。拿令牌登陆,需要https。
使用token(令牌)需要https协议,因为treafik代理的http,所以要创建证书去https访问dashboard
cfssl签发证书
拷贝证书
代理节点(zzgw7-11,zzgw7-12)
创建nginx 配置
获取token
浏览器登录
该项目将被官方废弃(RETIRED),在1.8版本以后由metricserver替代
创建并进入资源配置清单目录
rbac.yaml
deployment.yaml
service.yaml
查看创建的资源
注意:生产根据业务来规划升级时间,这里以zzgw7-21为例。
目前使用版本为,升级版本为
生存环境需要修改nginx.conf,把升级节点从upstream中注释掉
删除软连接要特别注意,目录后面不要带上