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 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>
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
3.kubectl 常用命令:
1.陈述式命令(命令式对象管理) 类似于我们直接在docker 中 docker run 命令 2.陈述式对象配置(命令式对象配置) 类似于类似于 docker-compose.yml 3.声明式对象配置(声明式对象配置)
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