1. 闲不住的人首页
  2. Kubernetes

Kubernetes 命令方式管理对象

1. 创建对象

1.1 kubectl run

创建 Deployment 对象

语法格式:

Usage:
  kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool]
[--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]

kubectl run 常用选项的作用说明:

  • –image=image:指明容器要运行的镜像
  • –port=port:指明容器暴露的端口
  • –env=”key=value”:为容器内部设置环境变量
  • –replicas=replicas:要为此容器创建的副本数,默认为1
  • –dry-run=true|false:干运行,不实际创建对象,默认 false

更多指令的说明参考:https://k8smeetup.github.io/docs/reference/generated/kubectl/kubectl-commands.html#run

举例演示:创建一个 nginx 镜像的容器,运行 2 个副本,暴露 80 端口;

root@k8s-master-opsbj:~ # kubectl run nginx --image=nginx:1.14-alpine --port=80 --replicas=2

root@k8s-master-opsbj:~ # kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7df9fc476f-chq5q   1/1     Running   0          7s
nginx-7df9fc476f-trmjz   1/1     Running   0          7s

1.2 kubectl expose

创建 Service 对象

Pod 容器是有生命周期的,当一个 Pod 内容器因为某种原因不能提供服务被重启或者重建时,容器的 IP 地址可能会发生变化,这时就需要为 Pod 的访问提供一个入口访问,这就是 Service ,Service 通过Pod 上的标签,就能找到这些容器;

Usage:
  kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name]
[--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]

kubectl expose 常用选项的作用说明:

  • –name:给 Service 对象定义一个名字
  • –target-port=:指明容器内暴露的端口
  • –port:指明通过哪个端口访问 Service 服务
  • –protocol:指明协议,默认 TCP

举例演示:为刚刚创建的 nginx 创建一个 Service 对象

root@k8s-master-opsbj:~ # kubectl expose deployment nginx --port=80 --target-port=80 --protocol=TCP --name=nginx-svc
service/nginx-svc exposed
root@k8s-master-opsbj:~ # kubectl get svc nginx-svc
NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
nginx-svc   ClusterIP   10.98.232.232   <none>        80/TCP    47s

然后就可以在集群内部通过 service 的 IP 访问 nginx 服务:

kubectl expose示例
kubectl expose示例

2. 查看对象

2.1 kubectl get

查看资源对象的基本信息

语法格式:

Usage:
  kubectl get
[(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...]
(TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]

常用选项说明:

  • -o json|yaml|wide:格式化输出;
  • –show-labels:显示每个对象的标签信息在最后一列
  • -l label:通过标签选择器,过滤出指定 label 的 Pod

更多指令的说明参考:https://k8smeetup.github.io/docs/reference/generated/kubectl/kubectl-commands.html#get

举例演示:

root@k8s-master-opsbj:~ # kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7df9fc476f-chq5q   1/1     Running   0          24m
nginx-7df9fc476f-trmjz   1/1     Running   0          24m

显示 Pod 对象的标签

root@k8s-master-opsbj:~ # kubectl get pods --show-labels
NAME                     READY   STATUS    RESTARTS   AGE   LABELS
nginx-7df9fc476f-chq5q   1/1     Running   0          27m   pod-template-hash=7df9fc476f,run=nginx
nginx-7df9fc476f-trmjz   1/1     Running   0          27m   pod-template-hash=7df9fc476f,run=nginx

过滤出所有 Pod 对象带有 app=nginx 标签的容器

root@k8s-master-opsbj:~ # kubectl get pods -l app=nginx --show-labels
NAME                       READY   STATUS    RESTARTS   AGE   LABELS
mynginx-74dc88d7b6-npg6h   1/1     Running   0          59s   app=nginx,pod-template-hash=74dc88d7b6
mynginx-74dc88d7b6-sllhm   1/1     Running   0          59s   app=nginx,pod-template-hash=74dc88d7b6

在 get pods 的结果中有一列 READY 的信息这里需要做一些说明:

READY
1/1
2/2

在上面 READY 结果中,斜线右边的数字表示这个 Pod 内部有几个容器,斜线左边的数字表示有几个容器处于就绪状态;

2.2 kubectl describe

打印有关匹配对象的汇总详细信息。

语法格式:

Usage:
  kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [options]

举例演示:

root@k8s-master-opsbj:~ # kubectl describe pod mynginx-74dc88d7b6-npg6h

2.3 kubectl logs

打印在 Pod 中运行的一个容器的 stdout 和 stderr

语法格式:

Usage:
  kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options]

举例演示:

root@k8s-master-opsbj:~/manifests # kubectl logs nginx-7df9fc476f-chq5q
10.244.0.0 - - [07/May/2019:07:49:51 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

如果一个 Pod 内部有多个容器,需要使用 -c 选项来指明查看哪个容器的日志

root@k8s-master-opsbj:~/manifests # kubectl get pods pod-demo
NAME       READY   STATUS    RESTARTS   AGE
pod-demo   2/2     Running   0          3m3s
root@k8s-master-opsbj:~/manifests #
root@k8s-master-opsbj:~/manifests # kubectl logs pod-demo -c myapp
10.244.0.0 - - [07/May/2019:08:12:33 +0000] "GET / HTTP/1.1" 200 29 "-" "curl/7.29.0" "-"
10.244.0.0 - - [07/May/2019:08:12:34 +0000] "GET / HTTP/1.1" 200 29 "-" "curl/7.29.0" "-"

3. 更新对象

3.1 kubectl scale

通过更新控制器的副本计数来水平缩放控制器以添加或删除 Pod

语法格式:

Usage:
  kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
[options]

举例演示:更新上面 nginx 这个 Deployment 对象的副本数为 5 个

root@k8s-master-opsbj:~ # kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7df9fc476f-chq5q   1/1     Running   0          46m
nginx-7df9fc476f-trmjz   1/1     Running   0          46m
root@k8s-master-opsbj:~ #
root@k8s-master-opsbj:~ #
root@k8s-master-opsbj:~ # kubectl scale deployment nginx --replicas=5
deployment.extensions/nginx scaled
root@k8s-master-opsbj:~ # kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7df9fc476f-6bmmv   1/1     Running   0          4s
nginx-7df9fc476f-chq5q   1/1     Running   0          46m
nginx-7df9fc476f-jqvjd   1/1     Running   0          4s
nginx-7df9fc476f-rm99z   1/1     Running   0          4s
nginx-7df9fc476f-trmjz   1/1     Running   0          46m

3.2 kubectl label

从对象中添加或删除标签

语法格式:

Usage:
  kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
[options]

举例演示:给其中一个nginx容器添加一个标签为 tier: frontend

root@k8s-master-opsbj:~ # kubectl get pods --show-labels
NAME                     READY   STATUS    RESTARTS   AGE   LABELS
nginx-7df9fc476f-chq5q   1/1     Running   0          51m   pod-template-hash=7df9fc476f,run=nginx
nginx-7df9fc476f-trmjz   1/1     Running   0          51m   pod-template-hash=7df9fc476f,run=nginx
root@k8s-master-opsbj:~ # kubectl label pod nginx-7df9fc476f-chq5q tier=frontend
pod/nginx-7df9fc476f-chq5q labeled
root@k8s-master-opsbj:~ # kubectl get pods --show-labels
NAME                     READY   STATUS    RESTARTS   AGE   LABELS
nginx-7df9fc476f-chq5q   1/1     Running   0          52m   pod-template-hash=7df9fc476f,run=nginx,tier=frontend
nginx-7df9fc476f-trmjz   1/1     Running   0          52m   pod-template-hash=7df9fc476f,run=nginx

要想删除标签只需要给出标签名字后面带一个 “-” 即可,如下示例:

root@k8s-master-opsbj:~ # kubectl label pod nginx-7df9fc476f-chq5q tier-
pod/nginx-7df9fc476f-chq5q labeled

这样就把 tier 这个刚刚添加上的标签给删除了

kubectl_label删除标签示例
kubectl_label删除标签示例

3.3 kubectl set

设置对象的某一个方面,比如更新对象的镜像版本;

语法格式:

Available Commands:
  env            Update environment variables on a pod template
  image          更新一个 pod template 的镜像
  resources      在对象的 pod templates 上更新资源的 requests/limits
  selector       设置 resource 的 selector
  serviceaccount Update ServiceAccount of a resource
  subject        Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding

Usage:
  kubectl set SUBCOMMAND [options]

举例演示:创建一个 nginx 的 Deployment 对象,镜像版本是 1.8.1 然后更新镜像到 1.14

root@k8s-master-opsbj:~ # kubectl run nginx --image=nginx:1.8.1
deployment.apps/nginx created
root@k8s-master-opsbj:~ # kubectl get deployment -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES        SELECTOR
nginx   1/1     1            1           60s   nginx        nginx:1.8.1   run=nginx

现在我们在更新镜像

root@k8s-master-opsbj:~ # kubectl set image deployment nginx nginx=nginx:1.14
deployment.extensions/nginx image updated
root@k8s-master-opsbj:~ # kubectl get deployment -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES       SELECTOR
nginx   1/1     1            1           2m10s   nginx        nginx:1.14   run=nginx

3.4 kubectl edit

通过在编辑器中打开其配置直接编辑活动对象的原始配置。

语法格式:

Usage:
  kubectl edit (RESOURCE/NAME | -f FILENAME) [options]

举例演示:使用 kubectl edit 编辑刚刚创建的 Deployment 对象 nginx 修改镜像版本为 1.10

kubectl edit示例
kubectl edit示例

4. 删除对象

可以使用 delete 命令从集群中删除对象:

语法格式:

kubectl delete <类型>/<名称>

举例演示:删除一个 Pod 副本

root@k8s-master-opsbj:~ # kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-797974c978-hnktb   1/1     Running   0          4m30s
nginx-797974c978-rfxn5   1/1     Running   0          3s
root@k8s-master-opsbj:~ #
root@k8s-master-opsbj:~ # kubectl delete pod nginx-797974c978-rfxn5
pod "nginx-797974c978-rfxn5" deleted

举例演示:删除一个 Deployment 对象

root@k8s-master-opsbj:~ # kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   2/2     2            2           12m
root@k8s-master-opsbj:~ # kubectl delete deployment/nginx
deployment.extensions "nginx" deleted

更多命令的使用方式参考官方文档:https://k8smeetup.github.io/docs/reference/generated/kubectl/kubectl-commands.html#-strong-getting-started-strong-

如果觉得文章不错,不妨给个『打赏』写作不易,各位的支持,能激发和鼓励我更大的写作热情。谢谢

原创文章,作者:恩志,如若转载,请注明出处:https://www.xbzdr.com/658.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:510749025@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code