导航:首页 > 程序命令 > kubernetes命令

kubernetes命令

发布时间:2023-05-29 19:23:06

‘壹’ k8s 常用命令总结

cp kubectl /usr/bin/

chmod 777 /usr/bin/kubectl

echo "export KUBECONFIG=/etc/kubernetes/kubeconfig/admin.kubeconfig" >> /etc/profile

source /etc/profile

#列出集群中的节点

kubectl get nodes 或 kubectl get no

#获取所有命段码物名空间

kubectl get namespace 或kubectl get ns

#获取所有pods

kubectl get pods 或 kubectl get po

#获取所有命名空间上的pods

kubectl get pods -o wide --all-namespaces

#查看kube-system namespace下面的pods/svc/deployment 等等(-o wide 选项可以查看存在哪个对应的节点)

kubectl get pods -n kube-system

kubectl get svc -n kube-system

kubectl get deployment -n kube-system

#查看所握液有namespace下面的pods/svc/deployment等等

kubectl get pods/模枣svc/deployment --all-namcpaces

#查看pod 日志 (如果pod有多个容器需要加-c 容器名)

kubectl logs xxx -n kube-system

kubectl logs -f xxx -n kube-system

#查看pod详细描述信息:

kubectl describe pod XXX -n kube-system

#查看运行的pod的环境变量

kubectl exec pod名 env

#删除资源(先确定是由说明创建的,再删除对应的kind):

kubectl delete pod  xxx -n kube-system

kubectl delete -f 文件名

kubectl delete pod pod名

kubectl delete rc rc名

kubectl delete service service名

kubectl delete pod --all

‘贰’ k8s常用命令

相关服务及用途节点名称服务名称用途管理节点kubctl-apiserver提供HTTP Rest统一接口服务,处理和验证REST请求和更新etcd中API对象的状态管理节点kubectl-controller-manager资源控制管理同步管理节点kube-scheler负责资源调度(调度Pod)工作节点kubelet管理Pod的生命周期,创建、启停等任务工作节点kube-proxy负大闷责网络通信及负载均衡### 1.重启服务kubectl patch deployment app名称 -p {"spec":{"template":{"metadata":{"labels":{"date":"date +'%s'"}}}}} -n kube-system

kubectl logs --previous l7-lb-controller-74c67fb85d-5b5cg -n kube-system

kubectl describe pod kubernetes-dashboard -n kube-system

kubectl get svc kubernetes-dashboard -n kube-system

kubectl get ep -n kube-system kubernetes-dashboard

lsmod | grep ip_vs
查看标签kubectl get node --show-labels -n kube-system
kubectl get pods --show-labels kube-sytem
kubectl get pod --show-labels kubernetes-dashboard-6845889d64-25f9x -n kube-system

kubectl describe svc kubernetes-dashboard -n kube-system
kubectl describe pod kubernetes-dashboard -n kube-system

在容器内执行命令kubectl exec -ti pod名称 /bin/基闭bash -n kube-system

kubectl get daemonset -o yaml -n kube-system calico-node
kubectl get svc -o json pod名称 -n kube-system

kubectl get daemonsets -n kube-system

通过文件创建cat > my-namespace.yaml << EOF
apiVersion: v1
kind: Namespace
metadata:
name: new-namespace
EOF
kubectl create -f ./my-namespace.yaml
删滚锋弯除命令空间kubectl delete namespaces new-namespace
删除一个namespace会自动删除所有属于该namespace的资源。default 和 kube-system 命名空间不可删除。### 15.创建/查看 Deployment 记录版本号kubectl create -f nginx-deployment.yaml --record

重新分配pod数量kubectl scale deployment kubernetes-dashboard --replicas=1 -n kube-system

查看升级历史记录kubectl rollout history deployment/kubernetes-dashboard -n kube-system
查看单个revision的详细信息kubectl rollout history deployment/kubernetes-dashboard --revision=1 -n kube-system
回滚到上一个版本kubectl rollout undo deployment/kubernetes-dashboard -n kube-system
指定回滚某个历史版本kubectl rollout undo deployment/kubernetes-dashboard --to-revision=1 -n kube-system

查看hap状态kubectl get hpa kubernetes-dashboard -n kube-system
查看hpa详细状态kubectl describe hpa kubernetes-dashboard -n kube-system
删除hpakubectl delete hpa kubernetes-dashboard -n kube-system

kubectl set image deploy kubernetes-dashboard nginx=nginx:1.9.1
更新升级资源kubectl set resources deployment kubernetes-dashboard -c=kubernetes-dashboard --limits=cpu=200m,memory=512Mi -n kube-system
恢复kubectl rollout resume deploy kubernetes-dashboard -n kube-system

kubectl get csr
添加新工作节点kubectl get csr|grep 'Pending' | awk 'NR>0{print 1}';do kubectl certificate approve 1}';do kubectl certificate deny 1}';do kubectl delete csr $i;done

查看集群访问连接kubectl cluster-info
查看权限kubectl describe clusterrole cluster-admin -n kube-system
查看kubectl版本kubectl version
查看支持api版本kubectl api-version
查看当前kubectl配置kubectl config view
查看集群状态kubectl get componentstatuses
kubectl get rs
查看集群节点kubectl get nodes
查看命名空间kubectl get namespaces
Node状态维护每个Node都包括以下状态信息
地址:包括hostname、外网IP和内网IP
条件(Condition):包括OutOfDisk、Ready、MemoryPressure和DiskPressure
容量(Capacity):Node上的可用资源,包括CPU、内存和Pod总数
基本信息(Info):包括内核版本、容器引擎版本、OS类型等
维护状态/取消维护模式kubectl cordon NodeName
kubectl uncordon NodeName

‘叁’ k8s kubectl常用命令总结

查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间
kubectl get pod
kubectl get pod -n kube

查看所有的命名空间
kubectl get ns

删除某个节点
kubectl delete pod 节点名称 -n 命名空间
查看 RC 和 service 列表, -o wide 查看详细信息
kubectl get rc,svc
kubectl get pod,svc -o wide
kubectl get pod -o yaml

查看某个名称空间下的所有节点以及ip
kubectl get pod -n 名称空间名 -o wide

模拟用户发起请求:
(模拟100个用户同时发起100000条请求,后面跟着ip地址)
ab -c 100 -k 100000 http://23.23.23.1 -o wide

显示仔坦租 Node 的详细信息
kubectl describe node 192.168.0.212

显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志
kubectl describe pod
eg:
kubectl describe pod redis-master-tqds9

根据 yaml 创建资源, apply 可以重复执行,create 不行
kubectl create -f pod.yaml
kubectl apply -f pod.yaml

基于 pod.yaml 定义的名称删除 pod
kubectl delete -f pod.yaml

删除所有包含某个 label 的pod 和 service
kubectl delete pod,svc -l name=

删除所有 Pod
kubectl delete pod --all

查看 endpoint 列表
kubectl get endpoints

执行 pod 的 date 命令
kubectl exec – date
kubectl exec – bash
kubectl exec – ping 10.24.51.9

通过bash获得 pod 中某个容器的TTY,相当信握于登录容器
kubectl exec -it -c – bash
eg:
kubectl exec -it redis-master-cln81 – bash

查看容器的日志
kubectl logs
kubectl logs -f # 实时查看日志

kubectl get pods --all-namespaces

kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system

查看pods具体信息
kubectl get pods -o wide kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
查看集群健康状态
kubectl get cs

获取所有deployment
kubectl get deployment --all-namespaces

列出该 namespace 中的所有 pod 包括未初始化的
kubectl get pods --include-uninitialized

查看deployment()
kubectl get deployment nginx-app

kubectl get rc,services
查看pods结构信息(重点,通过这个看日志分析错误)
对控制器和服务,node同样有效
kubectl describe pods xxxxpodsname --namespace=xxxnamespace
其他控制器类似吧,就是kubectl get 控制器念兆 控制器具体名称
查看pod日志
kubectl logs $POD_NAME
查看pod变量
kubectl exec my-nginx-5j8ok – printenv | grep SERVICE
集群
kubectl get cs # 集群健康情况
kubectl cluster-info # 集群核心组件运行情况
kubectl get namespaces # 表空间名
kubectl version # 版本
kubectl api-versions # API
kubectl get events # 查看事件
kubectl get nodes //获取全部节点
kubectl delete node k8s2 //删除节点
kubectl rollout status deploy nginx-test
创建
kubectl create -f ./nginx.yaml # 创建资源
kubectl create -f . # 创建当前目录下的所有yaml资源
kubectl create -f ./nginx1.yaml -f ./mysql2.yaml # 使用多个文件创建资源
kubectl create -f ./dir # 使用目录下的所有清单文件来创建资源
kubectl create -f https://git.io/vPieo # 使用 url 来创建资源
kubectl run -i --tty busybox --image=busybox ----创建带有终端的pod
kubectl run nginx --image=nginx # 启动一个 nginx 实例
kubectl run mybusybox --image=busybox --replicas=5 ----启动多个pod
kubectl explain pods,svc # 获取 pod 和 svc 的文档

kubectl rolling-update python-v1 -f python-v2.json # 滚动更新 pod frontend-v1
kubectl rolling-update python-v1 python-v2 --image=image:v2 # 更新资源名称并更新镜像
kubectl rolling-update python --image=image:v2 # 更新 frontend pod 中的镜像
kubectl rolling-update python-v1 python-v2 --rollback # 退出已存在的进行中的滚动更新
cat pod.json | kubectl replace -f - # 基于 stdin 输入的 JSON 替换 pod
强制替换,删除后重新创建资源。会导致服务中断。
kubectl replace --force -f ./pod.json
为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口
kubectl expose rc nginx --port=80 --target-port=8000

更新单容器 pod 的镜像版本(tag)到 v4
kubectl get pod nginx-pod -o yaml | sed ‘s/(image: myimage):.*$/\1:v4/’ | kubectl replace -f -
kubectl label pods nginx-pod new-label=awesome # 添加标签
kubectl annotate pods nginx-pod icon-url= http://goo.gl/XXBTWq # 添加注解
kubectl autoscale deployment foo --min=2 --max=10 # 自动扩展 deployment “foo”
编辑资源
kubectl edit svc/docker-registry # 编辑名为 docker-registry 的 service
KUBE_EDITOR=“nano” kubectl edit svc/docker-registry # 使用其它编辑器
动态伸缩pod
kubectl scale --replicas=3 rs/foo # 将foo副本集变成3个
kubectl scale --replicas=3 -f foo.yaml # 缩放“foo”中指定的资源。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # 将deployment/mysql从2个变成3个
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # 变更多个控制器的数量
kubectl rollout status deploy deployment/mysql # 查看变更进度

kubectl delete -f ./pod.json # 删除 pod.json 文件中定义的类型和名称的 pod
kubectl delete pod,service baz foo # 删除名为“baz”的 pod 和名为“foo”的 service
kubectl delete pods,services -l name=myLabel # 删除具有 name=myLabel 标签的 pod 和 serivce
kubectl delete pods,services -l name=myLabel --include-uninitialized # 删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的
kubectl -n my-ns delete po,svc --all # 删除 my-ns namespace下的所有 pod 和 serivce,包括尚未初始化的
kubectl delete pods prometheus-7fcfcb9f89-qkkf7 --grace-period=0 --force 强制删除

kubectl logs nginx-pod # mp 输出 pod 的日志(stdout)
kubectl logs nginx-pod -c my-container # mp 输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
kubectl logs -f nginx-pod # 流式输出 pod 的日志(stdout)
kubectl logs -f nginx-pod -c my-container # 流式输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
kubectl run -i --tty busybox --image=busybox – sh # 交互式 shell 的方式运行 pod
kubectl attach nginx-pod -i # 连接到运行中的容器
kubectl port-forward nginx-pod 5000:6000 # 转发 pod 中的 6000 端口到本地的 5000 端口
kubectl exec nginx-pod – ls / # 在已存在的容器中执行命令(只有一个容器的情况下)
kubectl exec nginx-pod -c my-container – ls / # 在已存在的容器中执行命令(pod 中有多个容器的情况下)
kubectl top pod POD_NAME --containers # 显示指定 pod和容器的指标度量

kubectl drain k8s-node # 清空 my-node 以待维护
kubectl top node k8s-node # 显示 my-node 的指标度量
kubectl cluster-info mp --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state

‘肆’ k8s常用命令

docker run busybox echo "hello world"

docker run --name kubia-container -p 8080:8080 -d kubia

docker build -t kubia .

docker images

docker ps

docker exec -it kubia-container bash

docker stop kubia-container
docker rm kubia-container

docker tag kubia luksa/kubia
docker login
docker push luksa/kubia

docker logs <container id>

kubectl run kubia --image=luksa/kubia --port=8080

kubectl expose pod kubia <--type=LoadBalancer --name kubia-http> (type指定svc类型默认clusterip,name指定svc名称)

kubectl get ... (#-o wide列出pod ip和运行节点 #-o yaml输出格式 #--show-lables列出标签#-L列出指定标签)
kubectl describe ...

kubectl cluster-info

kubectl explain pod
kubectl explain pod.spec

kubectl create -f kubia-manual.yaml

kubectl logs <pod> -c <container id> (#--previous获取奔溃容器的日志)

kubectl port-forward kubia-manual 8888:8080
参考: https://stackoverflow.com/questions/33517646/unable-to-do-port-forwarding-socat-not-found-kubernetes-on-docker

kubectl label po <pod name> <key=value> #添加
kubectl label po <pod name> <key=value> --overwrite #修改

kubectl annotate

kubectl delete po <pod name> (--all 所有poad)
kubectl delete po -l
kubectl delete ns #删除整个命名空间
kubectl delete all --all (删除所有资源)

128+9(SIGKILL) 进程强制终止,此时会创建一个腔搏全新容器
128+15(SIGTERM)

initalDelaySeconds 设置延迟来说明应用程序启动时间

kubectl delete rc kubia --cascade=false

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'

export CURL_CA_BUNDLE=/var/run/secrets/kubernetes.io/伍渣祥serviceaccount/ca.crt
TOKEN= TOKEN" https://kubernetes

kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --group=system:serviceaccounts

kubectl apply -f nginx-test.yaml

kubectl delete -f nginx-test.yaml #删除YAML文件中定义的资梁轮源

kubectl get deployment nginx-test -o yaml

kubectl create deployment test --image=nginx:1.7.9 --dry-run=client -o yaml > nginx.yaml

kubectl api-versions #查看K8S所支持API版本
kubectl api-resources #查看K8S所有资源类型
kubectl explain pods #发现api对象字段
kubectl explain pods.spec#了解各个属性更多信息

kubectl apply -f pod-demo.yaml
kubectl get pods #查看容器是否运行,正常情况应该是Running
kubectl get pods -o wide #查看pod详细信息,包含了IP、所属Node等
kubectl get pods --show-labels #查看资源标签
kubectl get pods -L creation_method,env #将creation_method,env标签展示在列表上
kubecl label pods kubia-manual creation_method=manual #添加标签
kubecl label pods kubia-manual env=debug --overwrite #修改标签--overwrite选项
kubectl get namespaces #查看namespace
kubectl get pods -n kube-system #显示指定namespace的pod

kubectl describe pods pod-demo

kubectl delete pods <pod name> #按名称删除
kubectl delete pods -l <label> #按标签删除<namespace> #删除整个命名空间来删除pod
kubectl delete pods --all #删除命名空间中的所有pod
kubectl delete all --all #删除命名空间中的几乎所有资源,pod rc svc
kubectl delete rc kubia --cascade=false #只删除 ReplicationController 并保待 pod 运行

kubectl logs mypod
kubectl logs mypod --previous #查看前一个容器的日志
退出状态码是两个数字的总和:128+x, 其中x是终止进程的信号编号

http://kubernetes.io/docs/user-guide/jsonpath

主要用于Pod调度和驱逐,优先级越低的QOS越容易被驱逐。不同QOS优先级不同,使用kubectl describe命令可以查看Qos Class:
· BestEffort:尽可能的为Pod分配资源,默认不进行requests设置就是该QOS,优先级最低
· Burstable:资源可波动,requests小于limit的值就是该QOS,推荐
· Guaranteed:完全可保障资源,必须使用requests和limit定义内存和CPU两项资源并且相等,优先级最高

由于每个节点都有 一个唯 一标签 , 其中 键为kubernetes.io/hostname,值为该 节点的 实际主机名

kubectl annotate pods <podname> <key=value>

‘伍’ Kubernetes中使用ConfigMap大全

ConfigMap在K8S中经常会使用到,它能使容器镜像和配置内容解耦,它可以绑定在volume上供容器访问,它的创建和使用也是灵活多样核郑,这篇文章翻译自Kubernetes官网,局氏世详细演示了如何创建ConfigMap和如何使用ConfigMap配置Pod,内容比较全面,希望能帮助到大家。

可以使用 kubectl create configmap 或 kustomization.yaml 中的 ConfigMap 生成器来创建 ConfigMap。 请注意,kubectl 从 1.14 开始支持 kustomization.yaml。

使用 kubectl create configmap 命令可以从目录、文件或文字值创建 ConfigMap。

其中 <map-name> 是您要分配给 ConfigMap 的名称,<data-source> 是从中提取数据的目录、文件或文字值。 ConfigMap 对象的名称必须是有效的 DNS 子域名。

基于文件桐肢创建ConfigMap时,<data-source>中的key默认为文件的basename,value默认为文件内容。

您可以使用 kubectl describe 或 kubectl get 来检索有关 ConfigMap 的信息。

您可以使用 kubectl create configmap 从同一目录中的多个文件创建一个 ConfigMap。 当你基于目录创建 ConfigMap 时,kubectl 会识别基本名称是目录中有效键的文件,并将这些文件中的每一个打包到新的 ConfigMap 中。 除常规文件外的任何目录条目都将被忽略(例如子目录、符号链接、设备、管道等)。例如:

上述命令将 configure-pod-container/configmap/ 目录中的每个文件(在本例中为 game.properties 和 ui.properties)打包到 game-config ConfigMap 中。 你可以使用以下命令显示 ConfigMap 的详细信息:

输入结果类似如下:

configure-pod-container/configmap/ 目录中的 game.properties 和 ui.properties 文件在 ConfigMap 的数据部分中表示。

输出如下:

可以使用 kubectl create configmap 从单个文件或多个文件创建 ConfigMap。例如:

使用kubectl describe可以查看

输出如下:

我们可以多次传入 --from-file 参数以从多个数据源创建 ConfigMap。

使用以下命令显示 game-config-2 ConfigMap 的详细信息:

输出如下:

当 kubectl 从非 ASCII 或 UTF-8 输入创建 ConfigMap 时,该工具会将这些放入 ConfigMap 的 binaryData 字段中,而不是数据中。 文本和二进制数据源都可以组合在一个 ConfigMap 中。 如果要查看 ConfigMap 中的 binaryData 键(及其值),可以运行 kubectl get configmap -o jsonpath='{.binaryData}' <name>。

使用选项 --from-env-file 从 env-file 创建一个 ConfigMap,例如:

运行下面的两个命令将创建如下的ConfigMap

输出如下:

如下实例:

输出如下:

使用 --from-file 参数时,您可以定义要在 ConfigMap 的数据部分中使用的文件名以外的键:

其中 <my-key-name> 是您要在 ConfigMap 中使用的键,<path-to-file> 是您希望该键表示的数据源文件的位置。
例如:

将产生如下的输出:

可以使用带有 --from-literal 参数的 kubectl create configmap 从命令行定义文字值:

产生输出如下:

kubectl 从 1.14 开始支持 kustomization.yaml。 您还可以从Generator创建一个 ConfigMap,然后应用它在 Apiserver 上创建对象。 Generator应在目录内的 kustomization.yaml 中指定。

例如,从文件 configure-pod-container/configmap/game.properties 生成一个 ConfigMap

应用 kustomization 目录来创建 ConfigMap 对象。

使用以下命令来check ConfigMap内容:

你可以定义要在 ConfigMap 生成器中使用的文件名以外的键。 例如,要从文件 configure-pod-container/configmap/game.properties 中生成一个 ConfigMap,其key为 game-special-key。

应用 kustomization 目录来创建 ConfigMap 对象。

如下实例:

应用 kustomization 目录来创建 ConfigMap 对象。

1)从单个ConfigMap的Data中定义容器环境变量
如下实例,
第一步,创建ConfigMap

第二步,在Pod specification中使用ConfigMap中定义的值赋给环境变量

实例如下:
第一步,声明多个ConfigMaps

第二步,创建ConfigMaps

第三步,在pod specification中使用ConfigMap中的Data

实例如下:
第一步,声明ConfigMap

第二步,创建ConfigMap

第三步,使用envFrom定义ConfigMap中所有data作为容器的环境变量。

第四步,创建POD

现在Pod中的环境变量包括SPECIAL_LEVEL=very 和 SPECIAL_TYPE=charm.

实例如下:

上面的实例中演示了从文件中创建ConfigMaps,文件名成为了key,文件内容成为了键值。
第一步,创建ConfigMap

第二步,使用ConfigMap里的存储的数据绑定到volume
在 Pod specification的volume部分下添加 ConfigMap 名称。 这会将 ConfigMap 数据添加到指定为 volumeMounts.mountPath 的目录(在本例中为 /etc/config)。 命令部分列出了名称与 ConfigMap 中的键匹配的目录文件。

创建Pod

当pod运行后,命令 ls /etc/config/产生下面的输出

实例如下:

创建Pod

当pod运行后,命令 ls /etc/config/产生下面的输出

ConfigMap Reference可以被标记为“可选”。 如果 ConfigMap 不存在,则挂载的卷将为空。 如果 ConfigMap 存在,但引用的键不存在,则安装点下方将不存在路径。

当挂载的ConfigMap 更新时,映射内容最终也会更新。 这适用于在 pod 启动后存在可选引用的 ConfigMap 的情况。
Kubelet 在每次定期同步时检查挂载的 ConfigMap 是否是最新的。 但是,它使用其本地基于TTL的缓存来获取 ConfigMap 的当前值。 因此,从更新 ConfigMap 到将新key投射到Pod的总延迟可以达到kubelet同步周期(默认为 1 分钟)+ ConfigMaps 缓存的 TTL(默认为 1 分钟) )。 在 kubelet 中,您可以通过更新 pod 的注释之一来触发立即刷新。

ConfigMap API 资源将配置数据存储为键值对。 数据可以在 pod 中使用,也可以为控制器等系统组件提供配置。 ConfigMap类似于Secrets,但提供了一种处理不包含敏感信息的字符串的方法。 用户和系统组件都可以在ConfigMap中存储配置数据。

输出类似结果:

‘陆’ kubernetes(k8s)secret使用

Secret有三种类型:
1、Opaque:base64 编码格式的 Secret,用来存储密码、密钥等;但数据也可以通过base64 –decode解码得到原始数据,所以加密性很弱。
2、kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。
3、kubernetes.io/service-account-token:用于被serviceaccount引用,serviceaccout 创建时Kubernetes会默认创建对应的secret。Pod如果使用了serviceaccount,对应的secret会自动挂载到Pod目录/run/secrets/kubernetes.io/serviceaccount中。

Opaque 类型的数据是一个 map 类型,要求value是base64编码格式,比如我们来创建一个用户名为 admin,密码为 admin321 的 Secret 对象,首先需要把这用户名和密码做 base64 编码,

然后可以利用上面编码过后的数据来编写一个YAML文件:(secret-demo.yaml)

然后同样使用kubectl命令来创建:

利用get secret命令查看:

其中default-token-n9w2d为创建集群时默认创建的 secret,被serviceacount/default 引用。

使用describe命令,查看详情:

我们可以看到利用describe命令查看到的Data没有直接显示出来,如果想看到Data里面的详细信息,同样我们可以输出成YAML文件进行查看:

创建好Secret对象后,有两种方式来使用它:
1、以环境变裂裤量的形式
2、以Volume的形式挂载

首先我们来测试下环境变量的方式,同样的,我们来使用一个简单的busybox镜像来测试下:(secret1-pod.yaml)

创建上面的Pod:

然后我们查看Pod的日志输出:

可以看到有 USERNAME 和 PASSWORD 两个环境变量输出出来。需要注意的举源带是,环境变量的方式,不支持动态更新密码。

同样的我们用一个Pod来验证下Volume挂载,创建一个Pod文件:(secret2-pod.yaml)

创建Pod:

然后我们查看输出日志:

可以看到secret把两个key挂载成了两个对应的文件。

除了上面的Opaque这种类型外,我们还可以来创建用户docker registry认证的Secret,直接使用kubectl create命令创建即可,如下:

然后查看Secret列表:

注意 看上面的TYPE类型,myregistry是不是对应的kubernetes.io/dockerconfigjson,同样的可以使用describe命令来查看详细信息:

同样的可以看到Data区域没有直接展示出来,如果想查看的话可以使用-o yaml来输出展示出来:

可以把上面的data.dockerconfigjson下面的数据做一个base64解码正芦,看看里面的数据是怎样的呢?

如果我们需要拉取私有仓库中的docker镜像的话就需要使用到上面的myregistry这个Secret:

我们需要拉取私有仓库镜像10.8.13.85/test:v1,我们就需要针对该私有仓库来创建一个如上的Secret,然后在Pod的 YAML 文件中指定imagePullSecrets。

另外一种Secret类型就是kubernetes.io/service-account-token,用于被serviceaccount引用。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的secret会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中。

这里我们使用一个nginx镜像来验证一下,大家想一想为什么不是呀busybox镜像来验证?当然也是可以的,但是我们就不能在command里面来验证了,因为token是需要Pod运行起来过后才会被挂载上去的,直接在command命令中去查看肯定是还没有 token 文件的。

最后我们来对比下Secret和ConfigMap这两种资源对象的异同点:

key/value的形式
属于某个特定的namespace
可以导出到环境变量
可以通过目录/文件形式挂载
通过 volume 挂载的配置信息均可热更新

Secret 可以被 ServerAccount 关联
Secret 可以存储 docker register 的鉴权信息,用在 ImagePullSecret 参数中,用于拉取私有仓库的镜像
Secret 支持 Base64 加密
Secret 分为 kubernetes.io/service-account-token、kubernetes.io/dockerconfigjson、Opaque 三种类型,而 Configmap 不区分类型

‘柒’ k8s常用命令

命令行 敲出的指令分为2种,

资源管理方式分类

直接使用命令去操作k8s资源,命令和参数一起出现

通过命令和配置文件去操作作k8s资源,命令还是那个命令,只不过参数都放在配置文件里面

使用apply创建资源,

说明

在master节点执行以下命令即可删除

还需要在work节点上执行以下命令来清空ini配置

先在主节点创建令牌

然后在需要加入集群的节点中执行令牌,注意这里的命令是通过 kubeadm token create --print-join-command 命令返回的结果

说明

记住,名称中不能用下划线 _ ,可以用横行 - 第一种创建方式–命令行创建

第二种创建方式–命令行 + 配置文件
创建一个名为namespace-dev.yaml的文件,内容如下(注意大小写,kind的头字母必须大写)

然后偶执行命令进行创建

需要注意的是,删除后,当前命名空间下的pod、deployment、 container 也会一起删掉

第一种–使用命令删除

第二种–使用配置文件删除

说明

获取所有namespace的pod并监视资源变动
加上 -w 表示监视资源变动信息,此时命令行进入阻塞状态,如果pod有变化将会马上呈现出来;

其他参数

因为pod里面至少要有一个容器,所以pod是和容器一起创建的,新建一个文件 pod.ymal ,内容如下

然后执行命令并指定配置文件进行创建

以下示例是为pod资源打标签,这种方式是和pod一起创建的,新建一个配置文件 label.yaml

执行命令创建pod

适合更新label值,前提是label的key必须已存在;

删除key为lebelKey的标签

pod控制器有很多种,我们这里就用deployment

使用以下run命令运行一个nginx,deployment名称为 app=run-cmd-nginx-deploy-3

通过以下命令可以看到,会自动生成一个 app=run-cmd-nginx-deploy-3 的标签

新建一个deployment.yaml文件,内容如下

需要注意的是,一旦删除pod控制器,此pod控制器下的所有pod和容器也会一并删除;

默认创建的pod是只能对内访问的,所以需要创建一个对外的访问端口,创建一个service其实就是暴露对外的访问端口

说明

创建好service之后,查看service信息,可以看到,暴露的端口为:30474,

新建一个service.ymal文件,内容如下

以下三种用法都可以

查询pod控制器和pod

Endpoint是kubernetes中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地址,它是根据service配置文件中selector描述产生的。

一个Service由一组Pod组成,这些Pod通过Endpoints暴露出来,Endpoints是实现实际服务的端点集合。换句话说,service和pod之间的联系是通过endpoints实现的。

每创建一个service,k8s会自动创建一个同名的 Endpoint出来

如果是由service创建出来的endpoints,删除后会马上创建出一个同名的endpoint出来,如果要删除必须先删除service

因为每次创建一个service,k8s会自动创建一个同名的 Endpoint出来,所我们直接创建service就可以了

--help 用来查看帮助文档,如果你不知道某个命令怎么使用了,就可以用 --help 查询命令的用法

explain用来查看配置文件的 资源结构,如果不知道配置文件中的资源用有哪些结构,那么就可以使用explain命令来查看

‘捌’ Kubectl 常用命令大全

create 命令 :根据文件或者输入来创建资源

delete 命令 :删除资源

get 命令 :获得资源信息

run 命令 :在集群中创建并运行一个或多个容器镜像。

更详细用法参见 : http://docs.kubernetes.org.cn/468.html

expose 命令 :创建一个service服务,并且暴露端口让外部可以访问

更多expose详细用法参见 : http://docs.kubernetes.org.cn/475.html

set 命令 :配置应用的一些特定资源,也可以修改应用已有的资源

set 命令详情参见 : http://docs.kubernetes.org.cn/669.html

这个命令用于设置资源的一些范围限制。

资源对象中的 Pod 可以指定计算资源需求(CPU-单位m、内存-单位Mi),即使用的最小资源请求(Requests),限制(Limits)的最大资源需求,Pod将保证使用在设置的资源数量范围。

对于每个Pod资源,如果指定了 Limits (限制)值,并省略了 Requests (请求),则 Requests 默认为 Limits 的值。

可用资源对象包括(支持大小写) : replicationcontroller 、 deployment 、 daemonset 、 job 、 replicaset 。

例如 :

设置资源的 selector (选择器)。如果在调用"set selector"命令之前已经存在选择器,则新创建的选择器将覆盖原来的选择器。

selector 必须以字母或数字开头,最多包含63个字符,可使用:字母、数字、连字符" - " 、点"."和下划线" _ "。如果指定了--resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。

注意 :目前 selector 命历手握令只能用于 Service 对象。

​用于更新现有资源的容器镜像。

可用资源对象包括: pod (po) 、 replicationcontroller (rc) 、 deployment (deploy) 、 daemonset (ds) 、 job 、 replicaset (rs) 。

explain 命令 :用于显示资源文档信息

edit 命令 : 用于编辑资源信息

label命令 : 用于更新(增加、修改或删除)资源上的 label(标签)

例 :

annotate命令 :更新一个或多个资源的Annotations信息。也就是注解信息,可以方便的查看做了哪些操作。

例子 :

completion命令 :用于设置 kubectl 命令自动补全

BASH

ZSH

rollout 命令 : 用于对资源进行管理

可用资源包括: deployments , daemonsets 。

子命令 :

rolling-update命令 : 执行指定ReplicationController的滚动更新。

该命令创建了一个新的 RC , 然后一次更新一个 pod 方式逐步使用新的 PodTemplate ,最终实现 Pod 滚动更新, new-controller.json 需要与之前 RC 在相同的 namespace 下。

scale命令 :扩容或缩容 Deployment 、 ReplicaSet 、 Replication Controller 或 Job 中 Pod 数量

scale 也可以指定多个前提条件,如:当前副本数量或 --resource-version ,进行伸缩比例设置前,系统会先验证前提条件是否成立。这个就是弹性伸缩策略。

autoscale命令 :这个比 scale 更加强大,也是弹性伸肢庆缩策略 ,它是根据流量的多少来自薯渗动进行扩展或者缩容。

指定 Deployment 、 ReplicaSet 或 ReplicationController ,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的pod数量。

certificate命令 :用于证书资源管理,授权等

cluster-info 命令 :显示集群信息

top 命令 :用于查看资源的cpu,内存磁盘等资源的使用率

cordon命令 :用于标记某个节点不可调度

uncordon命令 :用于标签节点可以调度

drain命令 : 用于在维护期间排除节点。

taint命令 :用于给某个 Node 节点设置污点

describe命令 :显示特定资源的详细信息

logs命令 :用于在一个pod中打印一个容器的日志,如果pod中只有一个容器,可以省略容器名

参数选项 :

exec命令 :进入容器进行交互,在容器中执行命令

命令选项 :

attach命令 :连接到一个正在运行的容器。

参数选项 :

cp命令 :拷贝文件或者目录到pod容器中

用于 pod 和外部的文件交换,类似于 docker 的 cp ,就是将容器中的内容和外部的内容进行交换。

api-servions命令 :打印受支持的 api 版本信息

help命令 :用于查看命令帮助

config 命令 : 用于修改 kubeconfig 配置文件(用于访问api,例如配置认证信息)

设置 kubectl 与哪个 Kubernetes 集群进行通信并修改配置信息。查看 使用 kubeconfig 跨集群授权访问 文档获取详情配置文件信息。

version 命令 :打印客户端和服务端版本信息

plugin 命令 :运行一个命令行插件

apply命令 :通过文件名或者标准输入对资源应用配置

通过文件名或控制台输入,对资源进行配置。 如果资源不存在,将会新建一个。可以使用 JSON 或者 YAML 格式。

参数选项 :

patch命令 :使用补丁修改,更新资源的字段,也就是修改资源的部分内容

replace命令 : 通过文件或者标准输入替换原有资源

convert命令 :不同的版本之间转换配置文件

要以特定格式将详细信息输出到终端窗口,可以将 -o 或 --output 参数添加到支持的 kubectl 命令。

Kubectl 日志输出详细程度是通过 -v 或者 --v 来控制的,参数后跟了一个数字表示日志的级别。 Kubernetes 通用的日志习惯和相关的日志级别在 这里 有相应的描述。

以上是 kubectl 一些基本命令操作,需要时方便查阅。

阅读全文

与kubernetes命令相关的资料

热点内容
一门两个加密锁 浏览:917
一部小说讲的是去乡下支教 浏览:471
算法英文单词 浏览:917
linuxhttpd配置文件 浏览:377
什么电影陈宝莲在厕所强奸 浏览:586
韩剧中小女孩奶奶是药店工作 浏览:678
男女生抱着看电影 浏览:489
手机银行app利率是什么意思 浏览:209
博途scl编译信号或精度丢失 浏览:631
静态编译失败的原因 浏览:234
西安人社app为什么注册不了 浏览:25
linux下root密码修改 浏览:700
苹果11watchapp有什么用 浏览:472
linux文件系统集群 浏览:748
大奥电视剧观看顺序 浏览:478
深圳程序员真实工资是多少 浏览:517
androidgetbytes 浏览:706
争鸣pdf 浏览:968
饥荒联机版如何直连服务器 浏览:121
妈妈的朋友崇石演过什么电影 浏览:868