桃之夭夭,灼灼其华

kubernetes 使用

Word count: 1.3kReading time: 7 min
2020/07/28 Share
命令 类型 描述
get 列出某个类型的下属资源
describe 查看某个资源的详细信息
logs 查看某个 pod 的日志
create 新建资源
explain 查看某个资源的配置项
delete 删除某个资源
edit 修改某个资源的配置项
apply 应用某个资源的配置项

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看集群信息
kubectl cluster-info

# 获取k8s上的所有节点
kubectl get nodes
# 获取服务
kubectl get service
# 获取ReplicaSet
kubectl get rs
# 获取Deployment
kubectl get deployments

# 描述一个节点的信息
kubectl describe node
# 获取命名空间kube-system 下的所有pod。 -o 显示IP 和node
kubectl get pod -n kube-system -o wide

单节点k8s服务

  • 准备docker镜像
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FROM alpine:latest
    LABEL maintainer="liion"
    # 拷贝编译程序
    ADD main /
    WORKDIR /
    # 打开8080端口
    EXPOSE 8080
    # 运行!
    CMD ["./main"]
    准备GO web项目,编译go项目
    1
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main
    生成docker镜像
    1
    docker build -t k8s-test:0.1 .
  • 创建pod,创建pod.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    apiVersion: v1
    kind: Pod
    metadata:
    name: k8s-test
    labels:
    app: k8s-test #标签
    spec:
    containers:
    - name: k8s-test
    image: k8s-test:0.1 #对应的docker镜像
    ports:
    - containerPort: 8080 #监听端口
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ➜ kubectl create -f pod.yml
    pod/k8s-test created
    ➜ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    k8s-test 1/1 Running 0 13s
    ➜ kubectl describe pods | grep Labels
    Labels: <none>
    ➜ kubectl apply -f pod.yml
    Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
    pod/k8s-test configured
    ➜ kubectl describe pods | grep Labels
    Labels: app=k8s-test
  • 配置服务Service
    Service 的作用有点像建立了一个反向代理和负载均衡器,负责把请求分发给后面的 pod
  • 创建svc.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    apiVersion: v1
    kind: Service
    metadata:
    name: k8s-test-svc
    labels:
    app: k8s-test
    spec:
    type: NodePort
    ports:
    - port: 8080
    nodePort: 30050 #暴露端口类似docker容器的端口映射,将本地的30050 -> 8080
    selector:
    app: k8s-test
    1
    2
    3
    4
    5
    6
    ➜ kubectl create -f svc.yml
    service/k8s-test-svc created
    ➜ kubectl get service
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    k8s-test-svc NodePort 10.107.103.59 <none> 8080:30050/TCP 5s
    kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d
  • curl http://127.0.0.1:30050
    1
    2
    ➜ curl http://127.0.0.1:30050
    {"IP":"10.1.0.63","message":"Hello GO!","time":"2020-07-28 13:01:30"}
  • 删除pod
    1
    2
    ➜ kubectl delete pod k8s-test
    pod "k8s-test" deleted

横向扩展、滚动更新、版本回滚

  • 创建deployment.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    apiVersion: apps/v1 #kubernetes 1.18 版本 apiVersion 从extensions/v1beta1 调整为apps/v1
    kind: Deployment
    metadata:
    name: k8s-test-deployment
    spec:
    replicas: 10 #指deployment要有10个pod
    minReadySeconds: 10 #更新间隔,指在更新了一个pod后,需要在它进入正常状态后10秒再更新下一个pod
    strategy:
    type: RollingUpdate
    rollingUpdate:
    maxUnavailable: 1 #指同时处于不可用状态的pod不能超过一个
    maxSurge: 1 #指多余的 pod 不能超过一个
    selector:
    matchLabels:
    app: k8s-test
    template:
    metadata:
    labels:
    app: k8s-test
    spec:
    containers:
    - name: k8s-test-pod
    # image: k8s-test:0.1
    image: k8s-test:0.2 #修改时升级版本为0.2
    ports:
    - containerPort: 8080 #监听端口
  • 横向扩展
    1
    2
    3
    4
    5
    6
    7
    8
    ➜ kubectl create -f deployment.yml
    deployment.apps/k8s-test-deployment created
    ➜ kubectl get rs
    NAME DESIRED CURRENT READY AGE
    k8s-test-deployment-75958fb65d 10 10 10 40s
    ➜ kubectl get deployments
    NAME READY UP-TO-DATE AVAILABLE AGE
    k8s-test-deployment 10/10 10 10 2m49s
  • 滚动更新
    1
    kubectl apply -f deployment.yml --record=true
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    ➜ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main
    ➜ docker build -t k8s-test:0.2 .
    Sending build context to Docker daemon 30.59MB
    Step 1/7 : FROM alpine:latest
    ---> a24bb4013296
    Step 2/7 : LABEL maintainer="liion"
    ---> Using cache
    ---> 076011b6935a
    Step 3/7 : ADD main /
    ---> 1d328bb849d4
    Step 4/7 : RUN chmod +x /main
    ---> Running in 66e8b70c65e8
    Removing intermediate container 66e8b70c65e8
    ---> 42fdf5cc92a8
    Step 5/7 : WORKDIR /
    ---> Running in 7c55500f2990
    Removing intermediate container 7c55500f2990
    ---> 85c301d1da3c
    Step 6/7 : EXPOSE 8080
    ---> Running in 505734fdd2fe
    Removing intermediate container 505734fdd2fe
    ---> d33ce9247036
    Step 7/7 : CMD ["./main"]
    ---> Running in f427fd82e054
    Removing intermediate container f427fd82e054
    ---> 24eb5672269b
    Successfully built 24eb5672269b
    Successfully tagged k8s-test:0.2
    ➜ kubectl apply -f deployment.yml --record=true
    Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
    deployment.apps/k8s-test-deployment configured
    ➜ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    k8s-test-deployment-69ff46fd95-4tw7s 1/1 Running 0 4s
    k8s-test-deployment-69ff46fd95-5tqwz 1/1 Running 0 16s
    k8s-test-deployment-69ff46fd95-7zpdq 1/1 Running 0 4s
    k8s-test-deployment-69ff46fd95-85w7m 1/1 Running 0 16s
    k8s-test-deployment-75958fb65d-67bqq 1/1 Running 0 31m
    k8s-test-deployment-75958fb65d-fx4pl 1/1 Running 0 31m
    k8s-test-deployment-75958fb65d-l7vmm 1/1 Running 0 31m
    k8s-test-deployment-75958fb65d-lr2kj 1/1 Running 0 31m
    k8s-test-deployment-75958fb65d-ng7k8 1/1 Running 0 31m
    k8s-test-deployment-75958fb65d-ts79t 1/1 Running 0 31m
    k8s-test-deployment-75958fb65d-xvrps 1/1 Running 0 31m
    ➜ kubectl rollout status deployment k8s-test-deployment
    Waiting for deployment "k8s-test-deployment" rollout to finish: 8 out of 10 new replicas have been updated...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 8 out of 10 new replicas have been updated...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 8 out of 10 new replicas have been updated...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 1 old replicas are pending termination...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 1 old replicas are pending termination...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 1 old replicas are pending termination...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 1 old replicas are pending termination...
    deployment "k8s-test-deployment" successfully rolled out
  • 版本回滚
    1
    kubectl rollout undo deployment k8s-test-deployment --to-revision=1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ➜ kubectl rollout undo deployment k8s-test-deployment --to-revision=1
    deployment.apps/k8s-test-deployment rolled back
    ➜ kubectl rollout status deployment k8s-test-deployment
    Waiting for deployment "k8s-test-deployment" rollout to finish: 2 out of 10 new replicas have been updated...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 8 out of 10 new replicas have been updated...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 8 out of 10 new replicas have been updated...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 8 out of 10 new replicas have been updated...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 8 out of 10 new replicas have been updated...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 1 old replicas are pending termination...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 1 old replicas are pending termination...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 1 old replicas are pending termination...
    Waiting for deployment "k8s-test-deployment" rollout to finish: 1 old replicas are pending termination...
    deployment "k8s-test-deployment" successfully rolled out
  • 删除
    1
    2
    ➜ kubectl delete deployment k8s-test-deployment
    deployment.apps "k8s-test-deployment" deleted

参考文档

CATALOG
  1. 1. 常用命令
  2. 2. 单节点k8s服务
  3. 3. 横向扩展、滚动更新、版本回滚
  4. 4. 参考文档