核心概念和资源
K8s 资源类型: Pod, Deployment, Service, DaemonSet, ConfigMap, Secret, Ingress
K8s 其他核心概念: Node, Label, Container, Volume, Network(IP), Port, ReplicaSet, Namespace
Node
是工作节点, 包含 Kubelet(与主节点通信), Docker(Pod 程序运行) 两部分Pod
是 多个Container
, 多个Volume
, 一个IP
地址, 多个Port
端口, 构建的服务单位, 每个Pod
可以有多个Label
标签, 用户分组选择.ReplicaSet
是 多个相同Pod
组成的复制集合, 构建的集群.Development
是ReplicaSet
的封装, 也是用于管理Pod
集群的工具.Service
是集群的网络抽象, 通过 Label 标签 和 Selector 选择器, 选择集群下的 Pod(一般 Deployment 创建 Pod 会将其打上标签). 因为Development
下的 Pod 会经常变动,Service
在 Pod 变化后动态更新映射, 保证向外提供稳定的服务.DaemonSet
是特殊的Pod
, 在指定Node
运行(日志收集, 监控…).
Pod 名字: NAME-rand-rand, DeployName-RsName-PodName
创建 Pod
1 | apiVersion: v1 |
创建 Deployment
1 | apiVersion: apps/v1 |
创建 Service
1 | apiVersion: v1 |
创建一个网络服务, 将 selector 指定的 pod 挂载进来. 服务 DNS 地址 redis-inner-service.default.svc.cluster.local
. 端口映射为 cluster 端口 port
映射到 pod 端口 targetPort
.
访问 pod 提供的服务使用: redis-inner-service.default.svc.cluster.local:port
即可.
创建 ConfigMap
使用命令
使用 create cm
创建 ConfigMap:
1 | // 单文件创建 |
映射 ConfigMap 到 Pod 文件夹中:
1 | spec: |
映射成功后, container 文件夹 /etc/nginx/nginx.d
中则有 https.conf
(非 http.conf
因为做了 path 映射) 文件. 如果不写 items 选择性映射, 则所有内容全部映射.
使用模板
使用 kustomization.yml
(必须是这个名字) 文件创建 ConfigMap:
1 | configMapGenerator: |
令配置生效 kubectl apply -k .
映射 ConfigMap 到 Pod 文件夹中:
1 | spec: |
映射思路为: name 为 nginx-config-4hc2dhhhg6
的 ConfigMap 作为 volume 加载进来, 加载后的名字为 nginx-config
(volumes.name); 将 volume nginx-config
(volumeMounts.name) 挂载到 container 中, 挂载位置为 /etc/nginx/nginx.d
(volumeMounts.mountPath)
Note: 映射文件夹 /etc/nginx/nginx.d
必须是可写权限, 否则报错.
创建 Secret
1 | kubectl create secret docker-registry XXX \ |
这个 Secret 是用于调用外部私有 Registry 的授权, 参考 “K8s 实战(6) - 从私有 Registry 拉取镜像”