kubectl

原创
2020/09/30 13:24
阅读数 347

kubectl使用说明

$ kubectl --help 
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create        Create a resource from a file or from stdin.
  expose        使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的 Kubernetes
Service
  run           在集群中运行一个指定的镜像
  set           为 objects 设置一个指定的特征

Basic Commands (Intermediate):
  explain       查看资源的文档
  get           显示一个或更多 resources
  edit          在服务器上编辑一个资源
  delete        Delete resources by filenames, stdin, resources and names, or by resources and label selector

Deploy Commands:
  rollout       Manage the rollout of a resource
  scale         Set a new size for a Deployment, ReplicaSet or Replication Controller
  autoscale     自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量

Cluster Management Commands:
  certificate   修改 certificate 资源.
  cluster-info  显示集群信息
  top           Display Resource (CPU/Memory/Storage) usage.
  cordon        标记 node 为 unschedulable
  uncordon      标记 node 为 schedulable
  drain         Drain node in preparation for maintenance
  taint         更新一个或者多个 node 上的 taints

Troubleshooting and Debugging Commands:
  describe      显示一个指定 resource 或者 group 的 resources 详情
  logs          输出容器在 pod 中的日志
  attach        Attach 到一个运行中的 container
  exec          在一个 container 中执行一个命令
  port-forward  Forward one or more local ports to a pod
  proxy         运行一个 proxy 到 Kubernetes API server
  cp            复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.
  auth          Inspect authorization

Advanced Commands:
  diff          Diff live version against would-be applied version
  apply         通过文件名或标准输入流(stdin)对资源进行配置
  patch         使用 strategic merge patch 更新一个资源的 field(s)
  replace       通过 filename 或者 stdin替换一个资源
  wait          Experimental: Wait for a specific condition on one or many resources.
  convert       在不同的 API versions 转换配置文件
  kustomize     Build a kustomization target from a directory or a remote url.

Settings Commands:
  label         更新在这个资源上的 labels
  annotate      更新一个资源的注解
  completion    Output shell completion code for the specified shell (bash or zsh)

Other Commands:
  alpha         Commands for features in alpha
  api-resources Print the supported API resources on the server
  api-versions  Print the supported API versions on the server, in the form of "group/version"
  config        修改 kubeconfig 文件
  plugin        Provides utilities for interacting with plugins.
  version       输出 client 和 server 的版本信息

Usage:
  kubectl [flags] [options]

使用

创建及扩容deployment

# 创建名为nginx的deployment,默认副本数为1
$ kubectl create deployment nginx --image=hub.adaixuezhang.cn/library/myapp:v1
deployment.apps/nginx created

$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6dc688b5c5-z9mvk   1/1     Running   0          98s

$ kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           30m

# 扩容deployment的副本为3
$ kubectl scale --replicas=3 deployment/nginx

$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6dc688b5c5-9r5mv   1/1     Running   0          4m21s
nginx-6dc688b5c5-lvclc   1/1     Running   0          4m53s
nginx-6dc688b5c5-zqjc4   1/1     Running   0          4m53s

创建svc

上面为nginx deployment指定了三个副本,要想让三个pods同时对外提供服务,需要使用负载均衡,在此使用svc来实现。

$ kubectl expose deployment nginx --port=30000 --target-port=80
service/nginx exposed

$ kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP     10h
nginx        ClusterIP   10.107.91.172   <none>        30000/TCP   3s

$ curl 10.107.91.172:30000
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

负载均衡遵循轮训机制:

提供外网访问端口

kubectl get svc 可查svc对应的ip,ip类型为ClusterIP,此时无法直接访问,如果想通过宿主机地址去访问对应deployment提供的服务,操作如下:

# 编辑对应deployment配置文件,修改spec:type值为NodePort
$ kubectl edit svc nginx
spec:
  clusterIP: 10.107.91.172
  ports:
  - port: 30000
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: NodePort
  
$ netstat -lntp|grep 31994
tcp        0      0 0.0.0.0:31994           0.0.0.0:*               LISTEN      14629/kube-proxy

此时会将内网端口映射到宿主机某端口(31994),如下图:

然后便可以通过该宿主机端口去访问nginx deployment对应的服务(该端口会在所有运行该deployment的node开启,即可以通过任何一个节点的宿主机ip:port去访问):

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部