在k8s中创建资源和查看信息

 

-1 通过run命令创建资源
% kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
上述命令表示以gcr.io/google-samples/kubernetes-bootcamp:v1作为image,创建一个名字为kubernetes-bootcamp的replication controller,并在自动分配的node上创建pod,然后运行对应的container,container在node host上映射的端口为8080;

 

-2 通过通过yaml文件创建资源(其他还支持操作get|apply|delete)
% kubectl create -f resource.yaml

 

-3 对k8s cluster里指定的资源进行操作
针对资源
deployment / pod / service / nameSpace / network / replicationSet
可执行
get / describe / logs / exec / explain
动作
% kubectl get deployments
% kubectl get pods
% kubectl get services

列出每个pod运行的详细信息,包含当前所在的node和ip,除了wide还有yaml和json格式的输出
% kubectl get pods -o wide

根据标签值筛选pod,列出标签中env=prod并且app=front的pod
% kubectl get pod -l env=prod, app=front

kubectl get动作缺省时从default的namespace下获取资源,namespace为不同的资源进行了大的分类,从而可提供如dev, test, prod, user, private, public等不同的区域;

$ kubectl label node {node-name}disk=ssd
除了pod可以添加标签,其他资源如node也可以添加标签;在创建DaemonSet类型的pod时,pod模板中nodeSelector指定具有期望label的node,调度的时候则DaemonSet仅在指定的node上运行;

 1 apiVersion: V1
 2 kind: DaemonSet
 3 metadata:
 4   name: ssd-monitor
 5 spec:
 6   selector:
 7     matchLabels:
 8       app: kubia
 9   template:
10     spec:
11       nodeSelector:
12         disk: ssd

 

在指定命名空间下创建pod
% kubectl create namespace dev
% kubectl create -f front.yaml --namespace dev

 

-4 通过replication controller逐步替换的方式升级指定service(deployment)下的pod,从而实现不停机升级;
% kubectl rolling-update {rc-old} {rc-new} --image={new-image}
基于new-image和rc-old创建rc-new,逐步替换rc-old控制的pod,rc-new每创建一个新的pod,rc-old则删除一个旧的pod,并切换流量,最终完全替换rc-old的pod;

但这样的滚动升级方式是通过rc-old的kubectl调用master api server实现的扩容、缩容,一旦rc-old kubectl所在的node网络出现问题,则rc-new可能处于中间状态;因此推荐使用Deployment的方式进行pod的创建和状态维护。

 

-5 将指定的deployment进行扩容,实际是修改replicationController的spec.replicas字段
% kubectl scale deployments/kubernetes-bootcamp --replicas=4

变更指定deployment的image,触发内部pod的rolling-update
% kubectl set image deployment kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

查看deployment中pod当前的升级部署状态,和历史升级记录
% kubectl rollout status deployment {deployment-name}
% kubectl rollout history deployment {deployment-name}

一旦新的image有问题则将pod的image回滚到指定版本
% kubectl rollout undo deployment {deployment-name} --to-version={#}

为deployment foo创建autoScaler,当cpu使用率达到80%时,replicaSet会至多创建5个pod提供扩容服务;
% kubectl autoscale deployment foo --min=2 --max=5 --cpu-percent=80

 

-6 service通过LabelSelector将多个pods组建成一个逻辑分组,pods通过endpoints提供连接service,并定义某种可expose到外网访问的策略,逻辑分组内的pods可分布于不同的nods上,因此service需要处理当某个node意外下线后,利用ReplicaSet将一同下线的pods在其他node上进行重建,同时保证新建的pods外网可访问;

% kubectl expose deployment kubernetes-bootcamp --type=LoadBalancer --port=8080
上述命令表示以名字kubernetes-bootcamp的deployment运行的pod为基础创建一个service,并以LoadBalancer的方式对外进行暴露,container在node host上映射的端口为8080;


执行下属命令可以进入到具体pod内,并执行命令:
% kubectl exec -it hello-node-67f857c88c-rfdls /bin/bash

针对指定的pod执行命令:
$ kubectl exec {pod-name} {cmd-to-exec}

获取指定pod的环境变量,
$ kubectl exec {pod-name} env
pod的元数据可以通过env项提供,但一旦pod元数据被更新,env变量的值将不会同步更新,因此推荐通过绑定downwardAPI卷的形式,将指定的pod元数据挂载到指定目录,并可进行同步更新,但仅限于单个pod的元数据,想要获取整个k8s的元数据还是需要通过k8s API server处获取;

获取当前cluster的kube master,kube dns等运行信息
% kubectl cluster-info

获取当前k8s支持的api版本信息,yaml文件中需要指定匹配的api version:
% kubectl api-versions

posted @ 2020-03-24 20:25  Leo C.  阅读(4082)  评论(0编辑  收藏  举报