Kubernetes--命令行工具 kubectl

server/2024/10/18 16:51:29/

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

一、在任意节点使用 kubectl

1、将 master 节点中 /etc/kubernetes/admin.conf 拷贝到需要运行的服务器的 /etc/kubernetes 目录中

 [root@k8s-master ~]# scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes

2、在对应的服务器上配置环境变量-

 echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profilesource ~/.bash_profile

二、资源操作

1、创建对象

1.1、命令行:

 $ kubectl create -f ./my-manifest.yaml           # 创建资源$ kubectl create -f ./my1.yaml -f ./my2.yaml     # 使用多个文件创建资源$ kubectl create -f ./dir                        # 使用目录下的所有清单文件来创建资源$ kubectl create -f https://git.io/vPieo         # 使用 url 来创建资源$ kubectl run nginx --image=nginx                # 启动一个 nginx 实例$ kubectl explain pods,svc                       # 获取 pod 和 svc 的文档

1.2、从stdin输入中创建多个YAML对象(较少使用):

 $ cat <<EOF | kubectl create -f -apiVersion: v1kind: Podmetadata:name: busybox-sleepspec:containers:- name: busyboximage: busyboxargs:- sleep- "1000000"---apiVersion: v1kind: Podmetadata:name: busybox-sleep-lessspec:containers:- name: busyboximage: busyboxargs:- sleep- "1000"EOF

1.3、创建包含几个 key 的 Secret

 $ cat <<EOF | kubectl create -f -apiVersion: v1kind: Secretmetadata:name: mysecrettype: Opaquedata:password: $(echo "s33msi4" | base64)username: $(echo "jane" | base64)EOF

2、显示和查找资源

2.1、获取具有基本输出的命令

 $ kubectl get services                          # 列出所有 namespace 中的所有 service$ kubectl get pods --all-namespaces             # 列出所有 namespace 中的所有 pod$ kubectl get pods -o wide                      # 列出所有 pod 并显示详细信息$ kubectl get deployment my-dep                 # 列出指定 deployment$ kubectl get pods --include-uninitialized      # 列出该 namespace 中的所有 pod 包括未初始化的

2.2、使用详细输出来描述命令:

 $ kubectl describe nodes my-node$ kubectl describe pods my-pod$ kubectl get services --sort-by=.metadata.name     # 列出按名称排序的服务

2.3、根据重启次数排序列出 pod:

 $ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'

2.4、获取所有具有 app=cassandra 的 pod 中的 version 标签

 $ kubectl get pods --selector=app=cassandra rc -o \jsonpath='{.items[*].metadata.labels.version}'

2.5、获取所有节点的 ExternalIP

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

2.6、列出属于某个 PC 的 Pod 的名字

 # “jq”命令用于转换复杂的 jsonpath,参考 https://stedolan.github.io/jq/$ sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}$ echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})

2.7、查看哪些节点已就绪

 $ JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"

2.8、列出当前 Pod 中使用的 Secret

 $ kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq

3、更新资源

 $ kubectl rolling-update frontend-v1 -f frontend-v2.json   # 滚动更新pod frontend-v1$ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2  # 更新资源名称并更新镜像$ kubectl rolling-update frontend --image=image:v2        # 更新frontend pod中的镜像$ kubectl rolling-update frontend-v1 frontend-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 mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -​$ kubectl label pods my-pod new-label=awesome                      # 添加标签$ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq       # 添加注解$ kubectl autoscale deployment foo --min=2 --max=10                # 自动扩展 deployment “foo”

4、修补资源

 # 部分更新节点$ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' ​# 更新容器镜像; spec.containers[*].name 是必须的,因为这是合并的关键字$ kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'​# 使用具有位置数组的 json 补丁更新容器镜像$ kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'​# 使用具有位置数组的 json 补丁禁用 deployment 的 livenessProbe$ kubectl patch deployment valid-deployment  --type json   -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'

5、编辑资源

 $ kubectl edit svc/docker-registry                 # 编辑名为docker-registry的service$ KUBE_EDITOR="nano" kubectl edit svc/docker-registry   # 使用其它编辑器

6、scale资源

 $ kubectl scale --replicas=3 rs/foo                  # 将名为“foo”的副本集扩展到 3$ kubectl scale --replicas=3 -f foo.yaml             # 将“foo.yaml”中指定的资源缩放为 3$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # 如果名为 mysql 的部署的当前大小为 2,则将 mysql 扩展到 3$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz    # 扩展多个复制控制器

7、删除资源

 $ 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,包括尚未初始化的

三、Pod与集群

1、与运行的Pod交互

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

2、与节点和集群交互

 $ kubectl cordon my-node               # 标记my-node不可调度$ kubectl drain my-node                # 清空my-node以待维护$ kubectl uncordon my-node             # 标记my-node可调度$ kubectl top node my-node             # 显示my-node 的指标度量$ kubectl cluster-info                 # 显示master和服务的地址$ kubectl cluster-info dump            # 将当前集群状态输出到 stdout                                    $ kubectl cluster-info dump --output-directory=/path/to/cluster-state   # 将当前集群状态输出到 /path/to/cluster-state​# 如果该键和影响的污点(taint)已存在,则使用指定的值替换$ kubectl taint nodes foo dedicated=special-user:NoSchedule

四、资源类型与别名

  • pods —— po
  • deployments —— deploy
  • services —— svc
  • namespace —— ns
  • node —— no

五、格式化输出

  • 输出json格式 —— -o json
  • 打印资源名称 —— -o name
  • 以纯文本格式输出所有信息 —— -o wide
  • 输出yaml格式 —— -o yaml

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!


http://www.ppmy.cn/server/103194.html

相关文章

远离内卷,新的跨境电商蓝海,智能小家电沃尔玛1P新赛道——WAYLI威利跨境助力商家

随着全球经济格局的变迁&#xff0c;跨境电商已经成为新的蓝海领域&#xff0c;其中智能小家电市场更是呈现出蓬勃的发展态势。在这样的背景下&#xff0c;沃尔玛1P会员凭借其独特的优势&#xff0c;正开辟出一条全新的跨境电商赛道。 一、智能小家电市场崛起&#xff0c;源于消…

leetcode-448. 找到所有数组中消失的数字

题目描述 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,3,1] 输出&#xff1a;[5,6…

Linux网络设置

目录 一、查看网络配置 1. 查看网络接口信息 ifconfig 1.1 查看所以活动的网络接口信息 1.2 查看指定网络接口信息 2. 查看主机名称hostname 2.1 hostname 命令 2.2 永久设置主机名 3. 查看路由表条目 route 3.1 route 命令 二、查看网络连接情况 1. 查看网络连接情…

Java 细节特性

JavaExercise1 package JavaExercise120240820;public class JavaExercise1 {public static void main(String[] args) {var age 18;var name "张三";System.out.println(name ": " age);// 在JDK10之后&#xff0c;对于可以根据赋值确定类型的变量&a…

一种基于单片机的教室用电子密码锁设计

设计了一种基于单片机的教室用电子密码锁&#xff0c;该系统主要包括核心处理器STM32VET6、TF卡外部存储、4*4矩阵键盘、DS1302定时模块、LCD1602显示器、步进电机驱动及电源模块。将该电子密码锁用于教室管理&#xff0c;可以极大地减轻学校教室管理人员的工作负担&#xff0c…

Python酷库之旅-第三方库Pandas(090)

目录 一、用法精讲 381、pandas.Series.plot方法 381-1、语法 381-2、参数 381-3、功能 381-4、返回值 381-5、说明 381-6、用法 381-6-1、数据准备 381-6-2、代码示例 381-6-3、结果输出 382、 pandas.Series.plot.area方法 382-1、语法 382-2、参数 382-3、功…

工作学习好帮手:盘点四大热门思维导图应用!

思维导图作为一种强大的思维工具&#xff0c;能够帮助我们整理思路、激发创意、提高工作效率。本文将为大家推荐包括幕布思维导图的四款思维导图工具&#xff01; 第一款&#xff1a;福昕思维导图 链接&#xff1a;pdf365.cn/naotu 福昕思维导图是一款功能强大的思维导图软件…

Linux执行脚本报错:-bash: ./mylife.sh: /bin/sh^M: bad interpreter: Text file busy

这个错误信息 -bash: ./mylife.sh: /bin/sh^M: bad interpreter: Text file busy 实际上包含了两个主要问题&#xff0c;但“Text file busy”这部分通常不是真实的错误&#xff0c;可能是显示错误或者与之前的操作冲突。更常见的问题是前面的 /bin/sh^M&#xff0c;这里的 ^M …