k8s主要概念
Cluster
Master
Master
是 Cluster
的大脑,主要负责调度,决定应用在哪里运行。
Node
- 运行容器的载体,由
Master
管理。Node
管理容器的生命周期。
Pod
- 是 k8s 的最小单元,
pod
可以包含一个或者多个容器。
pod
会被 Master
调度到某一个 node 上运行。
Controller
- k8s 通过
Controller
来管理 pod。Controller
有以下分类:
Deployment
ReplicaSet
- 使用
Deloyment
时会自动创建 ReplicaSet
,创建多个 Pod
副 本,实际上是通过 ReplicaSet
来实现的。通常情况下,我们不需要直接使用 ReplicaSet
。
DeamonSet
- 用于每个
Node
最多只运行一个 Pod
的场景。通常用于运行 Demon
。
StatefuleSet
- 能够保证每个
Pod
在生命周期内名称是不变的,其他 Controller
不能提供该功能。
- 当发生故障需要删除
Pod
并重启时,Pod
的名称会发生变化,同时 SttatefuleSet
能保证副本按照固定的顺序启动、更新或者删除。
Job
- 用于运行结束就删除的
Pod
,而其他 Controller
创建的 Pod
会一直运行。
Service
- 访问容器的入口,对外提供自己的 ip 和 端口。
- 为
Pod
提供了负载均衡。
- 服务发现。集群中其他服务可以通过 Service 名字访问后端服务(DNS),也可以通过环境变量访问。
Namespace
- 将一个
Cluster
进行逻辑上的划分。
- 不同的
Namespace
资源是完全隔离的。
- 系统默认会创建两个
Namespace
:default
和 kube-system
。
操作k8s资源
安装 k8s
minikube 安装教程
k8s官方安装教程
启动 k8s
1
| sjl@sjldeMacBook-Pro ~ minikube start
|
- 启动之前必须先安装
Docker
并启动,否则无法成功启动。
命令行操作
1
| kubectl [flags] [options]
|
flags 主要包含以下操作:
- create
- get
- edit
- delete
- run
- describe
- exec
- apply
Namespace
创建 Namespace
1
| kubectl create namespace sjl
|
1 2 3 4
| apiVersion: v1 kind: Namespace metadata: name: sjl-yaml
|
将上面的这一段脚本保存为 ns_create.yaml
,执行以下命令:
1
| kubectl apply -f ./ns_create.yaml
|
namespace 可以简写为 ns。namespace 名称校验规则: [a-z0-9]([-a-z0-9]*[a-z0-9])? ,只能使用小写字母中横线和数字,且只能以小写字母开头。
删除 Namespace
1
| kubectl delete namespace sjl
|
1
| kubectl delete -f ./ns_create.yaml
|
查看所有 Namespace
Pod&Deployment
创建 Deployment
1
| kubectl create deployment nginx-deployment --image=nginx:1.7.9 --replicas=2 -n sjl
|
创建 deployment ,指定名称为 nginx-deployment 镜像为: nginx:1.7.9 副本为 2 个, namespace 为 sjl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: sjl labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.17.9 ports: - containerPort: 8088
|
1
| kubectl apply -f ./deployment_crate.yaml
|
创建了 Deployment
就会创建对应的 Pod
。查看 Pod