前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes | 常用命令-缩容扩容回滚

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

作者头像
伍六七AI编程
发布2019-10-08 18:00:52
1.7K0
发布2019-10-08 18:00:52
举报
文章被收录于专栏:preparedprepared

查看版本

代码语言:javascript
复制
kubectl version

查看节点

代码语言:javascript
复制
kubectl get nodes

部署app

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

代码语言:javascript
复制
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

再如:

代码语言:javascript
复制
run test --image=preparedman/mytomcat:tagname --port=8088

查看app

代码语言:javascript
复制
kubectl proxy

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

代码语言:javascript
复制
{
  "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名字

代码语言:javascript
复制
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')

测试:echo Name of the Pod: $POD_NAME

使用kubectl进行故障排除

主要使用如下命令

代码语言:javascript
复制
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上执行命令

获取应用配置

查看应用是否在运行

代码语言:javascript
复制
kubectl get pods

查看pod 中有哪些container

代码语言:javascript
复制
kubectl describe pods

结果如下:

代码语言:javascript
复制
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日志

代码语言:javascript
复制
kubectl logs $POD_NAME

container中直接执行命令

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

代码语言:javascript
复制
kubectl exec kubernetes-bootcamp-6bf84cb898-jk4jc date  

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

代码语言:javascript
复制
kubectl exec kubernetes-bootcamp-6bf84cb898-jk4jc bash

退出使用

代码语言:javascript
复制
exit

暴露你的应用service

列出当前集群中的service

代码语言:javascript
复制
kubectl get services

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

代码语言:javascript
复制
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

查看service详情

代码语言:javascript
复制
$ kubectl describe services/kubernetes-bootcamp

结果:

代码语言:javascript
复制
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暴露的端口

代码语言:javascript
复制
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')

echo NODE_PORT=$NODE_PORT

测试:

代码语言:javascript
复制
curl $(minikube ip):$NODE_PORT

使用labels

查看label

代码语言:javascript
复制
kubectl describe deployment

你能看到这样一行:

代码语言:javascript
复制
Labels:                 run=kubernetes-bootcamp

通过label查询pod

代码语言:javascript
复制
kubectl get pods -l run=kubernetes-bootcamp

通过label查询service

代码语言:javascript
复制
kubectl get services -l run=kubernetes-bootcamp

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

代码语言:javascript
复制
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命令

代码语言:javascript
复制
kubectl label pod $POD_NAME app=v1

查看:

代码语言:javascript
复制
kubectl describe pods $POD_NAME

删除service

通过label删除service

代码语言:javascript
复制
kubectl delete service -l run=kubernetes-bootcamp

确认删除:

代码语言:javascript
复制
kubectl get services

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

代码语言:javascript
复制
curl $(minikube ip):$NODE_PORT

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

kubectl exec -ti $POD_NAME curl localhost:8080

扩容

设置deploymentsreplica数量为4

代码语言:javascript
复制
kubectl scale deployments/kubernetes-bootcamp --replicas=4

查看结果:

可以看到修改replica设置生效

代码语言:javascript
复制
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4/4     4            4           3m17s

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

代码语言:javascript
复制
kubectl get pods -o wide

结果:

代码语言:javascript
复制
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

代码语言:javascript
复制
kubectl describe deployments/kubernetes-bootcamp

结果:

代码语言:javascript
复制
Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable

查看service是否是负载均衡的

查看具体IP

代码语言:javascript
复制
kubectl describe services/kubernetes-bootcamp

结果:

代码语言:javascript
复制
Endpoints:                172.18.0.2:8080,172.18.0.4:8080,172.18.0.6:8080 + 1 more...

创建环境变量NODE_PORT\

代码语言:javascript
复制
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')

echo NODE_PORT=$NODE_PORT

调用请求

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

代码语言:javascript
复制
curl $(minikube ip):$NODE_PORT

结果:

代码语言:javascript
复制
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

缩容

代码语言:javascript
复制
kubectl scale deployments/kubernetes-bootcamp --replicas=2

## 更新到版本2

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

验证更新

查看暴露出来的ip和端口

代码语言:javascript
复制
kubectl describe services/kubernetes-bootcamp

结果:

代码语言:javascript
复制
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>

创建环境变量

代码语言:javascript
复制
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')

echo NODE_PORT=$NODE_PORT

访问:

代码语言:javascript
复制
curl $(minikube ip):$NODE_PORT

结果:

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

代码语言:javascript
复制
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

确认更新

代码语言:javascript
复制
kubectl rollout status deployments/kubernetes-bootcamp

回滚

更新到版本10

代码语言:javascript
复制
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10

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

代码语言:javascript
复制
kubectl get deployments
kubectl get pods
kubectl describe pods

报错

代码语言:javascript
复制
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

执行会滚

代码语言:javascript
复制
kubectl rollout undo deployments/kubernetes-bootcamp
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查看版本
  • 查看节点
  • 部署app
  • 查看app
  • 使用kubectl进行故障排除
    • 获取应用配置
      • 打印container日志
        • 在container中直接执行命令
        • 暴露你的应用service
          • 列出当前集群中的service
            • 创建一个新的service并暴露给外部流量
              • 查看service详情
                • 创建一个环境变量NODE_PORT,它的值等于service暴露的端口
                • 使用labels
                  • 查看label
                    • 通过label查询pod
                      • 通过label查询service
                        • 获取pod名字,并保存到环境变量POD_NAME中
                          • 添加新的lebel
                          • 删除service
                            • 通过label删除service
                            • 扩容
                              • 设置deployments的replica数量为4
                                • 查看service是否是负载均衡的
                                  • 查看具体IP
                                  • 创建环境变量NODE_PORT\
                                  • 调用请求
                              • 缩容
                                • 确认更新
                                  • 回滚
                                  相关产品与服务
                                  命令行工具
                                  腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档