一.简介

0.kubectl基础命令

(可tab补全,可单数,可复数,可简写,如replicasets/replicaset/rs都一样)

#kubectl create 通过文件或deployment方式创建资源对象,一般第一此创建使用
kubectl create -f nginx-deployment.yaml
kubectl create deployment nginx --image=nginx:1.17.1 --replicas=7

#kubectl apply 通过文件方式创建资源对象,一般用于后续更新
kubectl apply -f nginx-deployment.yaml

#kubectl apply和kubectl create 通过文件创建,yaml文件没修改都不能创建,修改后都可以创建

#kubectl run 通过非文件方式即命令行创建资源对象,在run中--replicas弃用
kubectl run --image busybox my-busybox

#kubectl get 查看资源对象-o wide 显示更多
kubectl get pods 
kubectl get nodes 
kucectl get svc
kubectl get rs

#kubectl describe 详细显示资源对象信息
kubectl describe deployment nginx
kubectl describe pod/nginx-74cdbf844b-g7bg9

#kubectl exec 进入容器执行命令
kubectl exec -it nginx-74cdbf844b-g7bg9 bash

#kubectl delete 删除资源对象
kubectl delete pod/nginx-74cdbf844b-g7bg9
kubectl delete deployment nginx

1.基本概念

Replication Controller:简称RC,按照用户指定的副本数量运行,保证Pod的数量和健康。

ReplicatSet:简称RS,按照用户指定的副本数量运行,保证Pod的数量和健康,不建议直接操作ReplicatSet,应该由Deplyment管理。

Deployment:部署,提供更新Replication Controller和Pod的机制,可更好的编排Pod,同样保证Pod的数量和健康。相对与RC有很多新特性,如滚动升级、回滚、版本记录、升级过程中进度和状态查看、暂停升级等。

2.创建deployment流程

用户通过kubectl create deployment创建一个deployment,然后deplyment根据用户指定的image、replicas创建ReplicaSet,然后由ReplicaSet创建pod副本和应用容器。

k8s Deployment  YAML_Deployment

二.YAML

1.kubectl create创建资源对象,可以用命令,还可以用如yaml配置文件。

#命令--image --replicas
kubectl create deployment nginx --image=nginx:1.17.1 --replicas=7
#配置文件 nginx.yaml定义资源信息
kubectl create -f nginx.yaml

2.YAML语法规范 类似JSON用键值表示,YAML是JSON的集合

用#号注释
区分大小写
严格的缩进关系来表示层级
缩进禁止tab键,只能用空格,空格数量无要求

3.YAML数据结构有映射map和列表list,Map的键值可以是list结构,list列表项也可以是Map结构

映射map型如下:

#apiVersion为键 ,apps/v1为值;kind为键,Deployment为值;
#metadata为键,有2个值name和labels,2个值又作为键,name为键,nginx-deployment为值,labels为键,nginx-web为值。
apiVersion: apps/v1
kind: Deployment
metadata:
   name:nginx-deployment
   labels:nginx-web
     app:nginx

列表list型如下:

#args为键,web、mysql和redis为值
args
 - web
 - mysql
 - redis

Map的键值可以是list结构,list列表项也可以是Map结构,如下

spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 7
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

4.deployment测试

#创建deployment
kubectl create -f nginx-deployment.yaml
#查看
kubectl get deployment
kubectl get replicaset
kubectl get pods
#删除deployment,deployment的
kubectl delete deployment nginx-deployment

5.扩容和缩容

#扩容
#nginx-deployment.yaml中pod副本改为8 replicas: 8
kubectl apply -f nginx-deployment.yaml
#或命令扩容,扩容到9个pod副本
kubectl scale deployment nginx-deployment --replicas=9
#或自动扩容
#kubectl autoscale deployment nginx-deployment --max=10 --min=7

#缩容
#nginx-deployment.yaml中pod副本改为3 replicas: 3
kubectl apply -f nginx-deployment.yaml
#上面的自动扩容怎么删除呀,变成3个后又到7个了
#或命令扩容,缩容到3个pod副本
kubectl scale deployment nginx-deployment --replicas=3

6.回滚

#更改nginx-deployment.yaml中的nginx版本image: nginx:1.17.1
#版本更新后,创建
kubectl apply -f nginx-deployment.yaml
#nginx版本验证 版本变为nginx:1.17.1
kubectl describe deployment nginx-deployment 
#历史版本查看
kubectl rollout history deployment/nginx-deployment
#执行回滚
kubectl rollout undo deployment nginx-deployment
#nginx版本验证  版本变为nginx:
kubectl describe deployment nginx-deployment
#历史版本查看
kubectl rollout history deployment/nginx-deployment