# Kubernates(K8S)

记录k8s一些学习方法、安装命令和脚本

  1. K8s课程资料仓库 (opens new window)
  2. istio (opens new window):K8s的连接、安全、控制和检测工具
  3. 容器服务-K8S知识图谱 (opens new window)
  4. Kubernetes中文社区 | 中文文档 (opens new window)
  5. Kubernetes Dashboard 及监控组件 Heapster 部署 (opens new window)
  6. KubeOperator (opens new window)
  7. Kubernetes指南 (opens new window)
  8. Kubernetes指南-Github (opens new window)
  9. 倪朋飞的博客-云计算领域 (opens new window)
  10. kubernetes概述-介绍、组件、架构 (opens new window)

# k8s知识点

第二章 kubernetes简介
第一节-k8s是什么?
第二节k8s优点
第三节-k8s功能
第四节-k8s在日志管理系统的应用
第五节-k8s在 Devops中的应用
第六节-k8s在微服务中的应用
第七节-k8s特点和功能总结
第八节-k8s118+新增功能
第九节-传统时代v容器时代部暑应用程序的对比分析

第三章 kubernetes组件
第一节- master节点组件 pserver
第二节- master节点组件kube-scheduler
第三节- master节点组件kube-controller-manager
第四节- master节点组件etcd
第五节- master节点组件 docker
第六节- master节点组件kube-proxy
第七节- master节点组件 calico
第八节- master节点组件 corns
第九节-node节点组件 kubelet
第十节-node节点组件 docker
第十一节-node节点组件 calico
第十二节-附加组件k8 s dashboard
第十三节-附加组件 Ingress controller
第十四节-附加组件 prometheus+ alertmanager+ guarana
第十五节-附加组件efk第十六节附加组件

第四章 kubernetes API
第一节API变更
第二节- OpenMP介绍
第三节-AP版本和AP组

第五章 kubernetes架构
第一节-结合架构图详解k8s架构

第六章 kubernetes1.18多 master节点高可用集群安装
初始化安装k8s集群的机器
配置 firewall和 iptables防火墙
配置 selinx和内核参数
安装和配置 docker
安装 keepalive
初始化k8s集群
安装caco组件
在k8s中添加 master2和 master3节点
在k8s中添加node节点
测试 keepalive+lvs实现k8s的 master节点高可用
安装k8s dashboard组件
配置 dashboard的管理员权限
安装 metrics-server组件

第七章 kubernetes1.18单 master节点高可用集群安装
安装配置docker
安装k8s的maste节点组件
安装k8s的node节点组件
在k8s中添加node节点
安装traefik组件
安装k8s的dashboard组件
安装metrics组件
kubectl top命令讲解

第八章 kubernetes命令行工具- kubectl
第一节- kubectl简介
第二节- kubect操作命令演示
笫三节- kubectl输出选项
第四节- kubot常用命令介绍

第九章 容器讲解
笫一节-容器概述
笫二节-容器镜像
第三节-私有镜像

第十章 docker讲解
第一节- docker优点和缺点
第二节-配置 docker镜像加速器
第三节- docke基本用法:和镜像相关的命令
第四节- docker基本用法:和容器相关的命令
第五节- docker.部署 nginx服务
第六节-通过 dockerfile构建第一个nginx镜像
第七节- dockerfile指令介绍
第八节- dockerfile指令-CMD和 ENTRYPOINT
第九节- dockerfile指令 VOLUME和 ONBUILD
第十节1- ONBUILD用法演示
第十一节- docker容器的数据持久化
第十二节- docker的数据卷容器
第十三节- docker数据备份和还原
第十四节 docker部署 tomcat服务
第十五节- docker网络
第十六节- docker容器互联
第十七节- docker容器隔离

第十一章 kubernetes pod
第一节-pod简介
第二节-po是如何工作的?
第三节- pod template模板介绍
第四节-和pod相关的ap对象
第五节-通过编写资源清单yam文件创建pod
第六节-容器钧子 poststall和 preSto
第七节-容器採针 livenessProbe和 Ireadinessprobe
第八节-pod常见的状态和重启策略
第九节-名称空间 namespace
第十节-pod标签和标簦选择器
第十一节- nodeselectori和 nodeName

第十二章pod的高级使用
第一节-容器存活性探测 livenessProbe讲解
第二节-容器就绪性探测 readinessProbe讲解
第三节- livenessProbe实践-演示使用exec探针
第四节livenessProbe实践-演示使用httpget探针
第五节-readinessProbe实践-演示使用httpget?探针
第六节-pod生命周期 lifecycle- poststart和 presto
第七节-测试 DostStart第八节-测试 preSto

第十三章 pod控制器replicaset 
replicase简介
通过replicase管理pod
replicase实现原理

第十四章 pod控制器 Deployment 
Deployment简介
通过 Deployment管理pod
Deployment控制器spec字段讲解

第十五章 replicase和Deploymen区别
replicase和deployment区别
replicase和 deploymen联系

第十六章 kubernetes service
第一节- kubernetes service介绍
第二节-测试通过 service访问pod
第三节-创建type是 Nodeporti的 service
第四节-创建没有 selector的 servce
第五节-创建tpe是 ExternalName的 servce
第六节- headless service讲解
第七节-创建type是 Load Balancer和 externally的 service
第八节- service type汇总整理

第十七章 kubernetes volume存储卷
第一节- kubernetes volume介绍
第二节- kubernetes volume- empty Dir
第三节- kubernetes volume- host Path
第四节- kubernetes volume- nfs
第五节- kubernetes volume-pvc
第六节测试pvc和v绑定
第七节-测试pod使用pvc存储卷
第八节-测试pvc的 Retain回收策略

第十八章pod控制器- daemons
第一节- Daemonset简介
第二节-通过 Daemonset'管理pod
第三节- Daemons部害 fluent组件
第四节-编写 Daemonset的资源清单文件

第十九章pod高级调度-污点和容忍度
第一节-污点和容忍度介绍
第二节-tant和 toleration用法
第三节-污点和容忍度应用场景
第四节-测试污点和容忍度

第二十章pod控制器 statefulset
第一节- statefulset介绍和使用
第二节-通过 statefulset创建pod
第三节- statefulset卷申请模板 volume ClaimTemplate
第四节- statefulset部罟和扩缩容
第五节-编写 statefulset的资源清单yam文件

第二十一章 storageclass
第一节- storageclass介绍
第二节- storageclassi通过n实现pv的动态供给
第三节- statefulset通过存储类动态生成pv

第二十二章 kubernetes认证、授权、准入控制
第一节-k8s认证、授权、准入控制介绍
第二节- token和 kubeconfig认证
第三节-kBs的RBAC授权机制
第四节-通过 token令牌登陆 dashboard
第五节-通过 kubeconfig登陆 dashboard

第二十三章 kubernets中部署EFK日志管理平台
k8s中安装 elasticsearch组件
k8s中安装 fluent组件
k8s中安装 kiana组件
配置 kiana界面-通过 kiana展示采集的日志数据

第二十四章hem
第一节-安装hem和 tiller
第二节·测试hem部k8s应用
第三节-hem部署 memcache
第四节-hem部暑 rabbitry

第二十五章在k8s中搭建 prometheus+ alertmanager +grafana全方位监控告警
第一节- prometheus简介
笫二节-安装nde- exporter组件
第三节-在k8s中安装 prometheus:组件
第四节-配置 prometheus热加载
笫五节-在kBs中安装 grafana组件
第六节- grafana导入 prometheus数据源
第七节-在 grafana界面展示物理节点资源指标
笫八节-在 guarana界面展示 docker.容器的资源指标
第九节-安装kube- state-mecs组件
第十节-在 grafana界面展示kBs资源指标
第十一节-在k8s中安装 aletmanager组件
第十二节-配置 alertmanager报警规则
第十三节配置 alertmanager发送报警到qq邮箱
第十四节-配置 alertmanager发送报警到钉钉
第十五节-配置 alertmanager发送报警到微信
第十六节-配置 alertmanager多途径报警

第二十六章基于 jenkins和 kubernetes的 DevOps平台
第一节- DevOps概述第二节-在kBs集群中安装 jenkins
第三节- jenkins对接 kubernetes
第四节- elkins配置 kubernetes的pod模板
第五节-配置 jenkins的 docker hub凭据第六节- jenkins pipeline语法
第七节-通过 pipeline部署k8s应用第八节-安装 jenkins的 BlueOcean插件
第九节-通过 pipeline部署k8s应用到测试、开发、运维环境
第十节-通过 pipeline实现k8s回滚

第二十七章k8s对接ceph
第一节-ceph块存储rbd介绍
第二节-ceph文件系统存储 cephas介绍
第三节-ceph对象存储 radosav介绍
第四节-分布式存储的优点
第五节-ceph核心组件介绍
第六节-安装ceph集群
第七节-添加 ceph osd
第八节- ceph os扩容、缩容
第九节-创建 ceph rbd
第十节-安装对接ceph的 kubernetes集群
第十一节- kubernetes对接 ceph rbd
第十二节-测试pod挂载 ceph rbd
第十三节-基于 ceph rbd生成pv
第十四节- statefulset+ storageclass+cph最佳实践
第十四节-基于 storageclass动态生成pw
第十五节安装多 monitor的ceph集群
第十六节-测试k8s对接ceph的多 monitor
第十七节-ceph集群故障排查

第二十八章 Ingress和 Ingress Controller

第二十九章k8s中部署 Mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240

TODO 需要校正上述文本是否正确,在日常工作中进行分析研究。

#删除services
$ kubectl delete services nginx-service

#删除deployments
$ kubectl delete deploy kubernetes-bootcamp
$ kubectl delete deploy nginx-deployment

#停掉worker节点的服务
$ service kubelet stop && rm -fr /var/lib/kubelet/*
$ service kube-proxy stop && rm -fr /var/lib/kube-proxy/*
$ service kube-calico stop

systemctl stop kubelet && rm -fr /var/lib/kubelet/*
systemctl stop kube-proxy && rm -fr /var/lib/kube-proxy/*
systemctl stop kube-calico 

#停掉master节点的服务
$ service kube-calico stop
$ service kube-scheduler stop
$ service kube-controller-manager stop
$ service kube-apiserver stop
$ service etcd stop && rm -fr /var/lib/etcd/*

kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
kubectl get pods
kubectl logs kubernetes-bootcamp-6b7849c495-q27nd -f	# 查看pods日志
kubectl describe pods kubernetes-bootcamp-6b7849c495-q27nd	# 查看pods配置
kubectl exec -it kubernetes-bootcamp-6b7849c495-q27nd bash	# 进入pods
kubectl get serviceaccount	#查看serviceaccount (简称sa)
kubectl get sa
kubectl get sa -o yaml  # 以yaml(也可以是json)格式输出sa配置
kubectl get secrets
kubectl set image pods nginx nginx=nginx:1.7.9	#修改pods镜像

apply 比create好的原因,是可以随便修改后生效

kubectl run busybox --rm=true --image=busybox --restart=Never --tty -i  # 以busybox创建一个终端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

docker 网络配置 (opens new window)

# Harbor

harbor下载地址 (opens new window)

curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

tar -zxvf harbor-online-installer-v1.9.2.tgz
cd harbor/

## 将域名添加到当前hosts中,例如 192.168.2.109 my.harbor.com
vim /etc/hosts

## 修改配置
vim harbor.yml

## 修改配置
## hostname: my.harbor.com
## harbor_admin_password: Harbor12345
## database:
##    password: root123

./prepare
./install.sh

## 启动harbor
./docker-compose up -d

## 停止HarBor
./docker-compose down -v

## 管理界面
http://my.harbor.com	admin/Harbor12345

## step01: 创建用户
## testuser	testuser@163.com testuser qazWSXedc123
## step02: 创建项目
## step03: 为项目分配成员
## step04: 配置其他机器host
echo '192.168.2.109 my.harbor.com' >> /etc/hosts
## 修改docker配置
vim /lib/systemd/system/docker.service
## 设置不安全地址
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry my.harbor.com
## 重启Docker
systemctl daemon-reload && systemctl restart docker
## step05: 登录仓库
docker login my.harbor.com
## step06: 重新标记镜像,并推送镜像至远程仓库
docker tag nginx:1.7.9 my.harbor.com/micro-service/nginx:1.7.9
docker push my.harbor.com/micro-service/nginx:1.7.9



docker tag yandex/clickhouse-server:latest registry.cn-beijing.aliyuncs.com/dkgee/clickhouse-server:latest
docker push registry.cn-beijing.aliyuncs.com/dkgee/clickhouse-server:latest

docker tag yandex/clickhouse-client:latest registry.cn-beijing.aliyuncs.com/dkgee/clickhouse-client:latest
docker push registry.cn-beijing.aliyuncs.com/dkgee/clickhouse-client:latest

docker tag spoonest/clickhouse-tabix-web-client:latest registry.cn-beijing.aliyuncs.com/dkgee/clickhouse-tabix-web-client:latest
docker push registry.cn-beijing.aliyuncs.com/dkgee/clickhouse-tabix-web-client:latest

docker tag elasticsearch:7.6.1 registry.cn-beijing.aliyuncs.com/dkgee/elasticsearch:7.6.1
docker push registry.cn-beijing.aliyuncs.com/dkgee/elasticsearch:7.6.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

# Calico

  1. 安装

  2. 重启

systemctl daemon-reload && service kube-calico start
journalctl -f -u kube-calico
systemctl daemon-reload && service kube-calico restart && journalctl -f -u kube-calico

1
2
3
4

# 查看状态

calicoctl node status netstat -natp|grep ESTABLISHED|grep 179 netstat -natp|grep ESTABLISHED|grep bird netstat -natp|grep bird

# 查看路由

route # 路由表 traceroute # 跟踪路由 traceroute 49.233.170.108 traceroute 122.51.101.124 traceroute 122.51.173.59

# Calico连接状况

Connect(成功启动,正在连接中) autodetect
Connect Socket: Host is unreachable(其他主机ip不通) 172.21.0.12
Active Socket: Connection closed(其他主机网络有问题) 49.233.170.108
Active Socket: Connection refused(其他主机端口没开放)
Active Socket: Host is unreachable(其他主机ip不通,主节点上出现该问题) autodetect

https://zhuanlan.zhihu.com/p/47228920

# linux查看网卡流量

tcpdump -i eth0 src host 172.17.0.10

# calico 设置IP-in-IP模式

calicoctl create -f ipPool-ipip-always.yaml
calicoctl delete -f ipPool-ipip-always.yaml
calicoctl get ipp -owide # 查看ipp段
calicoctl delete ipPool 10.254.0.0/24 # 删除相应的ipp段
calicoctl get ipPool -o yaml # 查看ipPool
ip a s # 查看本机 会给主机分配IP,去往其他节点是通过tunl0网卡转发的
ip r s # 查看路由
route -n

ipPool-ipip-always.yaml

apiVersion: v1
kind: ipPool
metadata:
  cidr: 192.168.0.0/16
spec:
  ipip:
    enabled: true
    mode: cross-subnet
  nat-outgoing: true

apiVersion: v1
kind: ipPool
metadata: 
cidr: 10.254.0.0/24 
spec:
ipip: 
    enabled: true
    mode: always
nat-outgoing: false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# calico BGP模式总结

https://www.jianshu.com/p/dcad6d74e526

  1. BGP模式总结:
    • BGP模式下,不会在服务器上创建tunl0,
    • 路由转发功能是通过服务器的网卡对流量进行转发的
  2. ipip-always模式,
    • 会在每个节点上,都创建tunl0,
    • 通过tunl0进行流量转发
  3. 混合ipip-bgp模式
    • 有些节点创建tunl0, 有些节点不创建tunl0
    • 通过tunl0和网卡进行流量转发
    • 如果calico集群里,存在多个混合ipip-bgp模式资源对象的话,只有第一个创建的ipip-bgp资源对象有效, 后面创建一直处于阻塞状态, 经测试,只有删除第一个后,第二个会自动创建的;
      • 也就是说,在calico集群中,同一时刻只能是第一个ipPool资源对象有效
  4. libnetwork插件负责从ipPool池里,获取IP,指定给docker容器的 )

# Docker网络通信

# 使用consul跨主机网络

  1. Docker跨主机网络实践 (opens new window)
  2. Docker容器跨主机通信--overlay网络 (opens new window)
  3. 参考关键词:networks driver overlay (opens new window)
  4. 推荐阅读:Docker Swarm简介 (opens new window)

Docker跨主机通信需要key value的服务来保存网络的信息,这里使用consul服务作为key value的服务

# step01: 构建跨主机网络信息保存consul
docker run -d --restart="always" --publish="8500:8500" --hostname="consul" --name="consul" index.alauda.cn/sequenceiq/consul:v0.5.0-v6 -server -bootstrap

# step02: 改造各台主机的Docker配置
vim /lib/systemd/system/docker.service
## 添加如下配置
## --cluster-store=consul://192.168.2.106:8500  # consul服务地址
## --cluster-advertise=172.16.200.208:2375    # 加入集群后,广播的地址,也就是每台机器的实际IP地址,也可是是本机的网卡
## 修改后,其中结果如下
## ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://192.168.2.106:8500 --cluster-advertise=192.168.2.106:2375
## 重新加载配置和重启docker容器。
systemctl daemon-reload && systemctl restart docker
## 查看consul 中的节点信息
## http://192.168.2.106:8500

# step03: 创建overlay网络  
docker network create -d overlay multi_host
docker network ls
docker network inspect multi_host
docker network rm multi_host

## 创建子网络
docker network create -d overlay --subnet 172.30.0.0/16 ctfx_net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 使用swam跨主机网络通信

docker跨主机的网络配置方法 (opens new window)

# step01: 在master运行以下命令会产生token,
docker swarm init 
# step02: 使用token,在slave运行
docker swarm join --token xxx  192.168.0.151:2377
# 在主节点上使用以下命令查看节点
docker node ls 
# 创建一个swarm网络,docker容器之间可以加入到这个网络里实现互联互通
docker network create -d overlay --attachable <网络名>
# 在启动容器的时候,加入到刚刚创建的网络中就完成了
# 在master上运行
docker run --name node1 -it --network <网络名> debian bash
# 在slave上运行
docker run --name node2 -it --network <网络名> debian bash

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# DNS

基于Docker快速搭建DNS Server (opens new window)

上次更新: 2020-06-10 14:29:09