2020-DevOps导论-Lec7-K8S入门
Lec7-K8S入门
1. 为什么需要K8S?
1.1. 容器是什么?
- 容器是资源精细化编排的代表。
- 容器通常指在一个隔离的环境中运行的进程以及进程所依赖的环境的总称。
- 隔离:借助于linux的namespace机制
- 资源限制:可以基于linux的cgroup计算对容器所能使用的资源做限制,主要指cpu、内存资
- 进程:linux进程
- 依赖环境:进程运行所依赖的库、以及其他的资源
- 容器的优点
- 更轻量
- 资源利用更高效
- 以应用为中心的管理
1.2. 为什么需要K8S
- 需要一个系统来管理集群上的大量容器。
- 用于完成容器的编排,目前K8S已经是容器编排领域事实上的标准。
2. 什么是K8S
- K8S是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
- 能力
- 支持不同的底层资源平台
- 自动弹性伸缩
- 高可靠性
2.1. K8S逻辑架构
- Master节点
- API Server
- Schuduler
- Controller
- etcd
- Node节点
- pod
- docker
- kubelet
- kube-proxy
- fluentd
2.2. K8S组件
- 控制平面:对集群做出全局决策,以及检查和响应集群时间(例如,当不满足部署的replicas字段时,启动新的pod)
- kube-apiserver
- kube-scheduler
- kube-controller-manager
- cloud-controller-manager
- etcd
- 计算平面
- 计算平面由Node节点组成
- 运行组件
- Kubelet
- Kube-proxy
- 容器运行时(Container Runtime)
- 插件(Addons)
- DNS
- Dashboard
- 容器资源监控
- 日志
2.3. K8S重要概念
2.3.1. POD
- POD是K8S的最小资源管理单位,POD有点脆弱。
- POD中包含资源
- 一个或多个应用程序容器
- 存储卷
- 网络地址,如IP地址、端口等
2.3.2. Workload 工作负载
- 工作负载是在K8S上运行的应用程序,K8S主要支持
- Deployment
- Statefulset
- Damonset
- Job
- CronJob
2.3.3. Service
- Service定义了POD提供给外部应用的方式
- 为什么引入Service?
- Service怎么和Pod关联起来?
- Service有哪些类型
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName
2.3.4. label
- label是
key/value
键值对,用来识管理和识别资源。 - Node、Pod、工作负载、密钥、configmap、service等等所有资源都可以增加标签
- 签通常用来识别资源,一般和标签选择器配合使用。
3. K8S实操
- 实操会覆盖一个应用的完整的生命周期
- 实验操作地址:https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/
3.1. 创建集群
- 本次实验使用Minikube
1 |
|
3.2. 部署应用
1 |
|
3.3. expose应用
1 |
|
3.4. 扩容缩容应用
1 |
|
3.5. 滚动升级
1 |
|
3.6. K8S学习建议
4. K8S进阶
4.1. 设计模式-K8S设计模式
- 控制器模式:面向期望状态的编程模式
- 一个控制器至少管理一种类型的K8S资源。
- 每个资源对象都有一个代表期望状态的spec字段。
- 该资源的控制器负责确保当前状态趋近期望状态
- 推荐阅读:《Kubernetes 设计模式》
4.2. 设计模式-插件模式
4.3. 存储
4.3.1. K8S存储架构
4.3.2. CSI架构
4.4. 网络
4.4.1. POD之间通信
4.4.2. kube-proxy & kube-dns
4.4.3. flannel
4.5. 调度
4.6. 容器运行时
2020-DevOps导论-Lec7-K8S入门
https://spricoder.github.io/2020/07/02/2020-Devops-introduction/2020-Devops-introduction-Lec7-K8S%E5%85%A5%E9%97%A8/