#### 1.1 实验内容
Pod 是 Kubernetes 最重要的核心概念,Kubernetes 中其它的对象都是在管理、暴露 Pod 或是被 Pod 使用。本节实验将会向大家介绍 Pod 这一核心概念。
#### 1.2 实验知识点
* Pod 简介
* 创建 Pod
* 标签
* 标签选择器
* 命名空间(Namespace)
* 删除 Pod
* 副本集(RS)
* 后台支撑服务集(DaemonSet)
* 任务(Job)
#### 1.3 推荐阅读
* [Pod Overview](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/)
* [Kubernetes API 文档](https://kubernetes.io/docs/reference/)
#### 1.4 课程环境
本课程全部为云主机环境,采用 Kubeadm-dind 方式在云主机环境里部署 Kubernetes 集群,DIND 代表 Docker in Docker,因为这种方式部署的集群里节点都是通过 Docker 容器模拟的,而部署到集群里的应用又以 Docker 容器运行在节点容器里。目前支持 Kubernetes 1.10.x 到 1.15.x 几个版本,我们实验环境中使用的是最新版的 1.15.x。
实验环境中已经下载好对应的脚本,文件地址为`/home/shiyanlou/dind-cluster-v1.15.sh`,使用这个脚本就可以直接启动整个集群。
先来启动集群:(整个启动过程大概需要一两分钟)
~~~bash
$ ./dind-cluster-v1.15.sh up
* Making sure DIND image is up to date
sha256:12574f2350c69da756ae10b85af0e1ff689a2b5fd3728a2f3112c68195c08d8c: Pulling from mirantis/kubeadm-dind-cluster
Digest: sha256:12574f2350c69da756ae10b85af0e1ff689a2b5fd3728a2f3112c68195c08d8c
Status: Image is up to date for mirantis/kubeadm-dind-cluster@sha256:12574f2350c69da756ae10b85af0e1ff689a2b5fd3728a2f3112c68195c08d8c
docker.io/mirantis/kubeadm-dind-cluster:62f5a9277678777b63ae55d144bd2f99feb7c824-v1.15@sha256:12574f2350c69da756ae10b85af0e1ff689a2b5fd3728a2f3112c68195c08d8c
* Restoring containers
* Restoring master container
* Restoring node container: 1
* Restoring node container: 2
* Starting DIND container: kube-master
* Starting DIND container: kube-node-1
* Starting DIND container: kube-node-2
* Node container restored: 1
* Node container restored: 2
* Master container restored
Creating static routes for bridge/PTP plugin
* Setting cluster config
Cluster "dind" set.
Context "dind" modified.
Switched to context "dind".
* Waiting for kube-proxy and the nodes
........................[done]
* Bringing up coredns
deployment.extensions/coredns scaled
....[done]
* Bringing up kubernetes-dashboard
deployment.extensions/kubernetes-dashboard scaled
..[done]
NAME STATUS ROLES AGE VERSION
kube-master Ready master 3d12h v1.15.0
kube-node-1 Ready <none> 3d12h v1.15.0
kube-node-2 Ready <none> 3d12h v1.15.0
* Access dashboard at: http://127.0.0.1:32768/api/v1/namespaces/kube-system/services/kubernetes-dashboard:/proxy
* Access dashboard at: http://127.0.0.1:32768/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy (if version>1.6 and HTTPS enabled)
~~~
如果在启动集群的过程中,一直卡在`deployment.extensions/coredns scaled`部分可以尝试使用 Ctrl+C 中断启动脚本,然后重新执行启动命令。如果试过好几次依然失败,可以关掉当前的云主机环境,重新启动环境进行实验。
在这个集群中有一个 master 节点为 kube-master,两个 node 节点分别为 kube-node-1 和 kube-node-2,它们的 IP 地址分别为:
~~~text
kube-master:10.192.0.2
kube-node-1:10.192.0.3
kube-node-2:10.192.0.4
~~~
- Pod 基本用法
- Pod 简介
- 操作 Pod
- 创建 Pod
- 标签
- 标签选择器
- 命名空间
- 删除及更新 Pod
- 副本集(RS)、后台支撑服务集(DaemonSet)、任务(Job)
- 副本集(RS)
- 后台支撑服务集(DaemonSet)
- 任务(Job)
- 使用 ConfigMap 配置应用程序
- ConfigMap 简介
- 创建 ConfigMap 资源对象
- 通过 YAML 配置文件方式创建
- 通过 kubectl 命令行方式创建
- 通过生成器创建 ConfigMap
- 在 Pod 中使用 ConfigMap
- 通过环境变量方式使用 ConfigMap
- 通过卷挂载(volumeMount)方式使用 ConfigMap
- 使用 Secret 传递敏感数据
- Secret 简介
- 默认令牌 Secret
- 创建 Secret
- 使用 kubectl 创建 Secret
- 使用 YAML 文件手动创建 Secret
- 使用生成器创建 Secret
- 使用 Secrets
- 挂载 Secret 到 Pod 中作为卷进行使用
- 使用 Secret 作为环境变量
- 使用镜像拉取 Secret(ImagePullSecrets)
- 多容器 Pod
- 多容器 Pod 简介
- Pod 中容器间的通信
- Pod 容器共享 Volume
- 进程间通信(IPC)
- 容器间网络通信
- Scheduler
- kube-scheduler 简介
- kube-scheduler 职责及调度流程
- 常用参数
- 预选策略(Predicates Policies)
- 优选策略(Priorites Policies)
- 自定义调度器
- 使用 Deployment 进行 Pod 升级回滚
- Deployment 简介
- Deployment 的升级
- 多重更新(Rollover)
- 更新 Deployment 的标签选择器(Label Selector)
- Deployment 的回滚
- Deployment 的暂停与恢复
- Pod 扩容与缩容
- 手动扩缩容
- 自动扩缩容
- 扩缩容算法
- php-apache 自动扩缩容实例
- 配置 HPA
- v1 版本
- v2beta2 版本
- DaemonSet
- DaemonSet 简介
- 运行示例程序
- 滚动更新
- StatefulSet
- StatefulSet 简介
- 运行 nginx 实例
- 扩缩容 StatefulSet
- 更新 StatefulSet
- 删除 StatefulSet
- 非级联删除
- 级联删除
- Pod 管理策略
- Service 基本用法
- Service 简介
- Service 的类型
- 使用命令创建服务
- 使用 YAML 文件创建服务
- Service Discovery
- 环境变量
- DNS
- ClusterIP Service
- ClusterIp Service 简介
- Normal Service
- YAML 文件模板
- 服务负载分发策略 & 多端口服务 & 端口命名
- 一个简单的例子
- Headless Service
- 无 Selector 的服务
- NodePort Service
- NodePort Service 简介及实例
- 扩展:客户端直接访问 Pod
- hostPort
- hostNetwork
- Port Forward
- LoadBalancer与ExternalName
- LoadBalancer Service 简介
- LoadBalancer Service 实例
- 使用 nginx 软件手动实现负载均衡
- 由云服务商提供负载均衡器
- ExternalName Service 简介
- Ingress
- Ingress 简介
- 部署 nginx-ingress-controller
- 部署一个简单的 Nginx 实例
- 不同的 Ingress 策略配置类型
- 配置 Ingress 处理 TLS 传输
