自学k8s系列~02之k8s主要概念

Kubernetes_Logo

k8s主要概念

Cluster

  • 集群。各种资源的集合。

Master

  • MasterCluster 的大脑,主要负责调度,决定应用在哪里运行。

Node

  • 运行容器的载体,由 Master 管理。Node 管理容器的生命周期。

Pod

  • 是 k8s 的最小单元,pod 可以包含一个或者多个容器。
  • pod 会被 Master 调度到某一个 node 上运行。

Controller

  • k8s 通过 Controller 来管理 pod。Controller 有以下分类:

Deployment

  • 最常用的 Controller 用于部署。

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 :defaultkube-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
  • yaml 方式
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
  • yaml 方式
1
kubectl delete -f ./ns_create.yaml

查看所有 Namespace

1
kubectl get 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

  • yaml
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

1
kubectl get pods -n sjl