kubernetes | 常用命令-缩容扩容回滚

栏目: 编程工具 · 发布时间: 6年前

内容简介:说明: 提供deployment名称和app镜像地址(docker镜像地址)再如:测试:curl

查看版本

kubectl version

查看节点

kubectl get nodes

部署app

说明: 提供deployment名称和app镜像地址(docker镜像地址)

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

再如:

run test --image=preparedman/mytomcat:tagname --port=8088

查看app

kubectl proxy

测试:curl http://localhost :8001/version

{
  "major": "1",
  "minor": "13",
  "gitVersion": "v1.13.3",
  "gitCommit": "721bfa751924da8d1680787490c54b9179b1fed0",
  "gitTreeState": "clean",
  "buildDate": "2019-02-01T20:00:57Z",
  "goVersion": "go1.11.5",
  "compiler": "gc",
  "platform": "linux/amd64"
}

获取 pod 名字

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')

测试:echo Name of the Pod: $POD_NAME

使用kubectl进行故障排除

主要使用如下命令

kubectl get - list resources 列出资源
kubectl describe - show detailed information about a resource 显示资源详情
kubectl logs - print the logs from a container in a pod 打印`pod` 中container的日志
kubectl exec - execute a command on a container in a pod 在`pod`中的container上执行命令

获取应用配置

查看应用是否在运行

kubectl get pods

查看 pod 中有哪些 container

kubectl describe pods

结果如下:

Name:               kubernetes-bootcamp-6bf84cb898-jk4jc
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               minikube/172.17.0.72
Start Time:         Wed, 24 Apr 2019 13:21:58 +0000
Labels:             pod-template-hash=6bf84cb898
                    run=kubernetes-bootcamp
Annotations:        <none>
Status:             Running
IP:                 172.18.0.4
Controlled By:      ReplicaSet/kubernetes-bootcamp-6bf84cb898
Containers:
  kubernetes-bootcamp:
    Container ID:   docker://55491b363d26b62e432cd4841ed4f65cc5b98e645d172c6ed88feaebcb4ec06c
    Image:          gcr.io/google-samples/kubernetes-bootcamp:v1
    Image ID:       docker-pullable://jocatalin/kubernetes-bootcamp@sha256:0d6b8ee63bb57c5f5b6156f446b3bc3b3c143d233037f3a2f00e279c8fcc64af
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 24 Apr 2019 13:22:00 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-l7v8b (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-l7v8b:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-l7v8b
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  3m6s  default-scheduler  Successfully assigned default/kubernetes-bootcamp-6bf84cb898-jk4jc to minikube
  Normal  Pulled     3m4s  kubelet, minikube  Container image "gcr.io/google-samples/kubernetes-bootcamp:v1" already present on machine
  Normal  Created    3m4s  kubelet, minikube  Created container
  Normal  Started    3m4s  kubelet, minikube  Started container

打印 container 日志

kubectl logs $POD_NAME

container 中直接执行命令

比如:获取 pod 名字是kubernetes-bootcamp-6bf84cb898-jk4jc的日期,默认使用第一个container container by default

kubectl exec kubernetes-bootcamp-6bf84cb898-jk4jc date

再入:进入 container 的命令行环境

kubectl exec kubernetes-bootcamp-6bf84cb898-jk4jc bash

退出使用

exit

暴露你的应用 service

列出当前集群中的 service

kubectl get services

创建一个新的 service 并暴露给外部流量

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

查看 service 详情

$ kubectl describe services/kubernetes-bootcamp

结果:

Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   run=kubernetes-bootcamp
Annotations:              <none>
Selector:                 run=kubernetes-bootcamp
Type:                     NodePort
IP:                       10.105.231.53
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  32400/TCP
Endpoints:                172.18.0.4:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

创建一个环境变量 NODE_PORT ,它的值等于 service 暴露的端口

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')

echo NODE_PORT=$NODE_PORT

测试:

curl $(minikube ip):$NODE_PORT

使用 labels

查看 label

kubectl describe deployment

你能看到这样一行:

Labels:                 run=kubernetes-bootcamp

通过 label 查询pod

kubectl get pods -l run=kubernetes-bootcamp

通过 label 查询service

kubectl get services -l run=kubernetes-bootcamp

获取pod名字,并保存到环境变量 POD_NAME

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')

echo name of the pod: $POD_NAME

添加新的 lebel

使用label命令

kubectl label pod $POD_NAME app=v1

查看:

kubectl describe pods $POD_NAME

删除 service

通过 label 删除service

kubectl delete service -l run=kubernetes-bootcamp

确认删除:

kubectl get services

确认没有暴露给集群外部:

curl $(minikube ip):$NODE_PORT

确认集群内部还可以访问:

kubectl exec -ti $POD_NAME curl localhost:8080

扩容

设置 deploymentsreplica 数量为4

kubectl scale deployments/kubernetes-bootcamp --replicas=4

查看结果:

可以看到修改 replica 设置生效

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4/4     4            4           3m17s

pod 数量已经改变,查看详情

kubectl get pods -o wide

结果:

NAME                                   READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-6bf84cb898-7tbrg   1/1     Running   0          2m50s   172.18.0.5   minikube   <none>           <none>
kubernetes-bootcamp-6bf84cb898-fx68f   1/1     Running   0          3m52s   172.18.0.4   minikube   <none>           <none>
kubernetes-bootcamp-6bf84cb898-prgsc   1/1     Running   0          2m50s   172.18.0.6   minikube   <none>           <none>
kubernetes-bootcamp-6bf84cb898-qv4gc   1/1     Running   0          2m50s   172.18.0.7   minikube   <none>           <none>

查看4个 pod

kubectl describe deployments/kubernetes-bootcamp

结果:

Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable

查看 service 是否是负载均衡的

查看具体IP

kubectl describe services/kubernetes-bootcamp

结果:

Endpoints:                172.18.0.2:8080,172.18.0.4:8080,172.18.0.6:8080 + 1 more...

创建环境变量 NODE_PORT \

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')

echo NODE_PORT=$NODE_PORT

调用请求

可以看到,每次请求的都是不同的 pod

curl $(minikube ip):$NODE_PORT

结果:

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-2l975 | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-zbmj4 | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-qg5xh | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-zbmj4 | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-bn98t | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-zbmj4 | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-zbmj4 | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-zbmj4 | v=1

缩容

kubectl scale deployments/kubernetes-bootcamp --replicas=2

## 更新到版本2

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

验证更新

查看暴露出来的ip和端口

kubectl describe services/kubernetes-bootcamp

结果:

Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   run=kubernetes-bootcamp
Annotations:              <none>
Selector:                 run=kubernetes-bootcamp
Type:                     NodePort
IP:                       10.98.28.235
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31419/TCP
Endpoints:                172.18.0.10:8080,172.18.0.11:8080,172.18.0.8:8080 + 1 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

创建环境变量

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')

echo NODE_PORT=$NODE_PORT

访问:

curl $(minikube ip):$NODE_PORT

结果:

访问版本2,且每次访问不同的地址

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-tcxpf | v=2
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-tcxpf | v=2
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-86c8g | v=2
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-fx9tf | v=2
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-tcxpf | v=2

确认更新

kubectl rollout status deployments/kubernetes-bootcamp

回滚

更新到版本10

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10

查看发现报错,因为版本库中没有版本10

kubectl get deployments
kubectl get pods
kubectl describe pods

报错

Warning  Failed     38s (x3 over 77s)  kubelet, minikube  Failed to pull image "gcr.io/google-samples/kubernetes-bootcamp:v10": rpc error: code = Unknown desc = Error response from daemon: manifest for gcr.io/google-samples/kubernetes-bootcamp:v10 not found

执行会滚

kubectl rollout undo deployments/kubernetes-bootcamp

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learning PHP, MySQL, JavaScript, and CSS

Learning PHP, MySQL, JavaScript, and CSS

Robin Nixon / O'Reilly Media / 2012-9-3 / USD 39.99

If you're familiar with HTML, you can quickly learn how to build interactive, data-driven websites with the powerful combination of PHP, MySQL, and JavaScript - the top technologies for creating moder......一起来看看 《Learning PHP, MySQL, JavaScript, and CSS》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具