记录了从 0 开始学习 Kubernetes 的知识点,学习资料等,长期更新中
学习资料
The Illustrated Children’s Guide to Kubernetes 面向小朋友的 k8s 基本讲解,通俗易懂,适用于纯小白了解
The difference between docker and Kubernetes reddit 讨论,有些答案通俗易懂,适用于纯小白入门了解
Kubernetes Crash Course for Absolute Beginners [NEW] 1 小时课程,初步了解 k8s 的构成,接下来可以看看 Nana 的 4 小时课程及官方文档
初识 K8s
Kubernetes 简介
- 开源容器编排
- google 开发的
- 提供任意环境,包括物理环境、云、虚拟环境等
解决什么问题
- 从单服务到微服务转变的过程中,对多容器运行管理的需求变高
- 管理成千上万的容器
提供什么能力
- 高可用(不会 downtime),always accessible by users
- 可扩展(scalability)高性能
- 容灾恢复(disaster recovery)- backup and store, will not lose data
架构
Node:
- master node (control panel): much more important, always have backup
- Work node: much bigger and more resource

组件 Components

Pod:
- k8s 中的最小单元
- 代表容器
- 通常一个 pod 代表一个应用,比如 1 个 docker
- 每个 pod 都有自己的 ip 地址
- pod 可以很容易被替换,新的 pod 会被分配新的 ip
Service:
用于通信
永久性的静态 ip 地址,
即使 pod die,service ip address 不变
分为 external service (比如应用) 和 internal service (default type)(比如数据库)
Ingress:
- route traffic to cluster,路由分配
ConfigMap:
- 可以从外部配置 pod 数据,比如修改数据库名称或者 url
- 只放一些不用于机密的数据
sercet
- 存储一些加密数据
- 环境变量
volumn:
- 保证数据持久化,即使 db 挂掉重新加载也不会丢失
- 本地存储或者远程比如云存储
Deployment:
- 复制 app,防止挂掉
statefulset:
- 复制 DB

创建 configuration file
- metadata
- spec
- Status: 由 k8s 自动生成,来源于 etcd(etcd holds the current status of any k8s component)
1 | apiVersion: v1 |
Minikube and Kubectl
Minikube:一个 node 包含 master node process 和 work node process,这个 node 预装了 docker,因此可以在这个 node 跑容器
Kubectl:commend line tool for k8s cluster,可以用来创建、删除 pod,执行 node 等
安装
1 | brew install minikube #同时也装上了kubectl |
创建文件

四个文件
- Mongo-config.yaml,官网搜索 configmap 查询写法
1 | apiVersion: v1 |
- Mongo-secret.yaml,官网搜索 sercet 查询写法
encode 方式:terminal 运行echo -n name | base64 即可得到 bW9uZ291c2Vy
1 | apiVersion: v1 |
- Mongo.yaml,官网搜索 deployment 查询写法,包含 deployment 和 service
Request – port:8080 –> Mongo Service – targetPort:27017 –> Pod
1 | apiVersion: apps/v1 |
webapp.yaml:
1 | apiVersion: apps/v1 |
在 minikube 运行
启动 minikube
1 | minikube start --driver docker |
运行 yaml
1 | kubectl apply -f mongo-config.yaml |
获取 node’s ip address
1 | minikube ip |
获取 k8s 组件基本信息
1 | kubectl get node |
获取组件额外信息
1 | kubectl get pod -o wide |
获取特定组件详细信息
1 | kubectl describe svc {svc-name} |
获取 log
1 | kubectl logs {pod-name} |
关闭 Minikube cluster
1 | minikube stop |