灵虚御风
醉饮千觞不知愁,忘川来生空余恨!

导航

 
 1 kubernetes基本概念及操作命令
 2  坂田陈浩南 发表于 2020/05/08 15:40:17  3k+  2  2
 3 【摘要】 一、几个概念:kubernetes/pod/docker/container1.K8S,就是基于容器的集群管理平台,它的全称,是kubernetes2.Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。3.pod是k8s中的最小部署单元,不是一个程序/进程,而是一个环境4.一个pod可以运行1个或多个containerkubernetes中的DaemonSet等概念Daemon...
 4 一、几个概念:
 5 kubernetes/pod/docker/container
 6 1.K8S,就是基于容器的集群管理平台,它的全称,是kubernetes
 7 
 8 2.Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
 9 
10 3.pod是k8s中的最小部署单元,不是一个程序/进程,而是一个环境
11 
12 4.一个pod可以运行1个或多个container
13 
14 kubernetes中的DaemonSet等概念
15 DaemonSet DaemonSet  确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。 Volume Volume是Kubernetes Pod中多个容器访问的共享目录。 hostPath hostPath 卷能将主机节点文件系统上的文件或目录挂载到您的 Pod 中 emptyDir emptyDir类型的Volume在Pod分配到Node上时被创建,Kubernetes会在Node上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除。
16 
17 Pod状态
18 Pod 的 status 定义在 PodStatus 对象中,其中有一个 phase 字段。
19 
20 Pod 的运行阶段(phase)是 Pod 在其生命周期中的简单宏观概述。该阶段并不是对容器或 Pod 的综合汇总,也不是为了做为综合状态机。
21 
22 Pod 相位的数量和含义是严格指定的。除了本文档中列举的内容外,不应该再假定 Pod 有其他的 phase 值。
23 
24 下面是 phase 可能的值:
25 
26 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。
27 
28 运行中(Running):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
29 
30 成功(Succeeded):Pod 中的所有容器都被成功终止,并且不会再重启。
31 
32 失败(Failed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
33 
34 未知(Unknown):因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。
1.Kubernetes基本概念
 1 1.操作 pod:
 2     查看pod列表:kubectl get pods options[--namespace=<namespaceName>]
 3     删除pod:kubectl delete pod <podId>
 4     查看pod日志:kubectl logs <podId>
 5     查看pod详情:kubect describe pod <podId> 
 6     查看单个pod: kubect get pod [podId] option[--output=yaml]
 7     指定yaml创建pod: kubectl create -f <template.yaml>
 8     或 : kubectl apply -f <template.yaml>,可以修改模板文件,重新apply 来做升级
 9 
10 2.操作damonset
11     查看daemonset 列表:kubectl get daemonset option[--namespace=<namespaceName>]
12     删除damonset: kubectl delete daemonset <daemonsetId>
13     指定yaml文件运行damonset: kubectl create -f <template.yaml> 或者 kubectl apply -f  <template.yaml> ,可以修改模板文件,重新apply 来做升级
14 
15 3.操作节点
16     查看节点:kubectl get nodes option[--show-labels] option[--output=wide]
17     给节点打标签:kubectl label nodes <your-node-name> disktype=ssd
18     优雅结束节点上的所有pod,并同时标记节点为不可调度: kubectl drain <nodename>
19     重新使节点可调度:kubectl uncordon <your-node-name>
20 
21 4.serviceaccount
22     创建 serviceaccount: kubectl create serviceaccount <servicecount-name>
23     查看 serviceaccount:kubectl get serviceaccounts
24 
25 5.角色绑定
26     创建角色绑定:kubectl create clusterrolebinding <role-binding-relation-name> --clusterrole=<role-name> --serviceaccount=<namespace-name>:<serviceacount-name>
27     删除角色绑定:kubectl delete clusterrolebinding <role-binding-relation-name>
28     大概规律就是:kubectl <操作类型> <资源类型> <实例id>
2.Kubernetes命令
  1 # 查看所有 namespace的pods运行情况 
  2 kubectl get --all-namespace
  3 
  4 # 查看具体的pods,记得后面跟字段名
  5 kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
  6 
  7 # 查看pods 具体信息
  8 kubectl get pods -o wide kubernets-dashboard-76479d66bb-nj8wr --namespace=kube-system
  9 
 10 # 查看集群健康状态
 11 kubectl get cs
 12 
 13 # 获取所有deployment
 14 kubectl get deployment --all-namespaces
 15 
 16 # 列出该namespace 中的所有 pod 包括未初始化的
 17 kubectl get pods --include-uninitialized
 18 
 19 # 查看deployment()
 20 kubectl get deployment nginx-app
 21 
 22 # 查看rc 和servers
 23 kubectl get rc,services
 24 
 25 # 查看pods 结构信息(重点:通过这个日志分析错误)
 26 # 对控制器和服务,node 同样有效
 27 kubectl describe pods xxxxpodsname --namespace=xxxnamespace
 28 # 其他控制类似吧,就是kubectl get 控制器 控制器具体名称
 29 
 30 # 查看pod日志
 31 kubectl logs $POD_NAME
 32 
 33 # 查看pod变量
 34 kubectl exec my-nginx-5j8ok -- printenv | grep SERVICE       # service
 35 
 36 # 集群
 37 kubectl get cs # 集群健康状况
 38 kubectl cluster-info # 集群核心核心组件运行情况
 39 kubectl get namespace # 表空间名
 40 kubectl version # 版本
 41 kubectl api-version # API
 42 kubectl get events # 查看事件
 43 kubectl get nodes // 获取全部节点
 44 kubectl delete node k8s2 // 删除节点
 45 kubectl rollout status deploy nginx-test //查看资源的状态
 46 
 47 # 创建
 48 # 其中-f参数代表引用k8s对象定义文件file的意思
 49 kubectl create -f ./nginx.yaml # 创建资源
 50 kubectl create -f .  # 创建当前目录下所有的 yaml资源
 51 kubectl create -f ./nginx.yaml -f ./mysql2.yaml  # 使用多个文件创建资源
 52 kubectl create -f ./dir  # 使用目录下所有清单来创建资源
 53 kubectl create -f https://git.io/vPieo  # 使用url 来创建资源
 54 kubectl run -i --tty busybox --image=busybox ---创建带有终端的 pod
 55 kubectl run nginx --image=nginx # 启动一个 nginx实例
 56 kubectl run mybusybox --image=busybox --replicas=5  ---启动多个pod
 57 kubectl explain pods,svc # 获取 pod 和 svc 的文档
 58 
 59 # 更新
 60 kubectl rolling-update python-v1 -f python-v2.json  # 滚到更新 pod frontend-v1
 61 kubectl rolling-update python-v1 python-v2 --image=image:v2 # 更新frontend pod 中的镜像
 62 kubectl rolling-update python --image=image:v2  # 更新frontend pod 中的镜像
 63 kubectl rolling-update python-v1 python-v2 --rollback # 退出已存在的进行中的滚动更新
 64 cat pod.json | kubectl replace -f -  # 基于stdin 输入的JSON 替换pod
 65 强制替换,删除后重新创建资源,会导致服务器中断
 66 kubectl replace --force -f ./pod.json
 67 为nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000端口
 68 kubectl expose rc nginx --port=80 --target-port=8000
 69 
 70 # 更新单容器 pod 的镜像版本(tag)到v4
 71 kubectl get pod nginx-pod -o yaml |sed 's/\(image:myimage\):.*$/\1:v4' | kubectl replace -f -
 72 kubectl label pods nginx-pod new-label=aweasome # 添加标签
 73 kubectl annotate pods nginx-pod icon-url=http://geo.gl/XXBTWq # 添加注释
 74 kubectl autoscale deployment foo --min=2 --max=10 # 自动扩展deployment "foo"
 75 
 76 # 编辑资源
 77 kubectl edit svc/docker-registry # 编辑名为 docker-registry 的service
 78 KUBE_EDITOR="nano" kubectl edit svc/docker-registry # 使用其他编辑器
 79 
 80 # 动态伸缩pod
 81 kubectl scale --replicas=3 rs/foo  # 将foo 副本集变成3个
 82 kubectl scale --replicas=3 -f foo.yaml # 缩放“foo"中指定资源
 83 kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # 将deploy/mysql 从2个变成3个
 84 kubectl scale --replicas=5 rc/foo rc/bar rc/baz  # 变更多个控制器的数量
 85 kubectl rollout status deploy deployment/mysql  # 查看变更进度
 86 
 87 # 删除
 88 kubectl delete -f ./pod.json  # 删除pod.json 文件中定义的类型和名称 的pod
 89 kubectl delete pod,service baz foo  # 删除名为 ”baz"的 pod 和名为 “foo"的service
 90 kubectl delete pods,service -l name=myLabel # 删除具有 name=myLabel 的标签的 pod 和 service
 91 kubectl delete pods,service -l name=myLabel --include-uninitialized # 删除具有 name=myLabel 标签的 pod 和 service
 92 kubectl -n my-ns delete po,svc --all # 删除 my-ns namespace 下所有的 pod 和service ,包括尚未初始化的
 93 kubectl delete pods prometheus-7fcfc9f89-9kkf7 --grace-period=0 --force # 强制删除
 94 
 95 # 交互
 96 kubectl logs nginx-pod # dump 输出 pod 的日志(stdout)
 97 kubectl logs nginx-pod -c my-container # dump 输出 容器的日志 (stdout,pod有多个容器的情况下使用)
 98 kebectl logs -f nginx-pod #流式输出 pod的日志(stdout)
 99 kubect logs -f nginx-pod -c my-container # #流式输出 pod的日志(stdout,pod有多个容器的情况下使用)
100 kubectl run -i --tty busybox --image=busybox -- sh # 交互式shell 的方式运行
101 kubectl attach nginx-pod -i # 连接到运行中的容器
102 kubectl port-forward nginx-pod 5000:6000 # 转发pod中 的 6000端口 到本地的 5000 端口
103 kubectl exec nginx-pod -- ls/  # 在已存在的容器中执行命令(只有一个容器的情况下)
104 kubectl exec nginx-pod -c my-container --ls # 在已存在的容器中执行命令(pod有多个容器的情况下)
105 kubectl top pod POD_NAME --container # 显示指定 pod 和 容器的指标度量
106 
107 # 调度配置
108 kubectl cordon k8s-node # 标记 my-node 不可调度
109 kubectl drain k8s-node # 清空 my-node 以待维护
110 kubectl uncordon k8s-node # 标记 my-node 可调度
111 kubectl top node k8s-node # 显示 my-node 的指标度量
112 kubectl cluster-info dump  # 将当前集群状态输出到 stdout
113 kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state
114 
115 # 如果该键和影响的污点(taint)已存在,则使用指定的值替换
116 kubectl taint nodes foo dedicated=special-user:NoSchedule
kubectl 命令集

 

3.kubectl 常用命令:

1.陈述式命令(命令式对象管理) 类似于我们直接在docker 中 docker run 命令
2.陈述式对象配置(命令式对象配置) 类似于类似于 docker-compose.yml
3.声明式对象配置(声明式对象配置)
3.1kubectl的命令可分为三类:
3.2.kubectl命令的语法如下:

3.2. kubectl 命令的语法

kubectl [command] [TYPE] [NAME] [flags]

(1)comand:指定要对资源执行的操作,例如 create、get、describe 和 delete。
(2)TYPE:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的形式。例如:

kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1

(3)NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源, 例如:

kubectl get pods
复制

(4)flags:指定可选的参数。例如,可用 -s 或者 -server 参数指定 Kubernetes API server 的地址和端口。

3.3下面开始列出kubernetes一些经常用到的命令:

  1.kubectl get nodes  # 查询k8s集群节点

  

  2.查看所有的 pod # 查看所有的 pod

  

  3.kubectl describe pod nginx-6867 cd567-ht2bz # 查看pod的详细内容

  

 

   

  4.kubectl cluster-info # 查看 k8s 集群的信息

  

  5.kubect version # 查看当前k8s 集群的版本

  

 

 

3.4 陈述式命令(命令对象管理)

我们可以通过陈述式命令(命令式对象管理) 对namespace/pod操作;常用的陈述式命令整理如下:

  1.2.3.4.5.6

3.5 命令式对象配置

命令式对象配置就是使用命令配合配置文件一起来操作k8s资源 类似于我们学习的docker-compose 定义 yml 配置文件 需要对yaml 配置有一定了解。

3.6 声明式对象配置

声明式对象配置跟命令式对象配置很类似,通过命令apply

posted on 2022-07-18 13:32  没有如果,只看将来  阅读(215)  评论(0编辑  收藏  举报