原文地址 https://blog.csdn.net/footless_bird/article/details/125798691
官方文档 https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux/
(资料图)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
如需下载某个指定的版本,请用指定版本号替换该命令的这一部分: $(curl -L -s https://dl.k8s.io/release/stable.txt)。
例如,要在 Linux 中下载 v1.25.0 版本,请输入:
curl -LO https://dl.k8s.io/release/v1.25.0/bin/linux/amd64/kubectl
验证该可执行文件(可选步骤)
下载 kubectl 校验和文件:
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
基于校验和文件,验证 kubectl 的可执行文件:
下载的 kubectl 与校验和文件版本必须相同。
安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
说明:
执行测试,以保障你安装的版本是最新的:
kubectl version --client
更新 apt 包索引,并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
sudo apt-get install -y ca-certificates curl
如果你使用 Debian 9(stretch)或更早版本,则你还需要安装 apt-transport-https:
sudo apt-get install -y apt-transport-https
下载 Google Cloud 公开签名秘钥:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
添加 Kubernetes apt 仓库:
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 apt 包索引,使之包含新的仓库并安装 kubectl:
sudo apt-get update
sudo apt-get install -y kubectl
官方(会超时)
cat <
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y kubectl
使用阿里云镜像安装
前置步骤
安装docker
设置主机名称
查看Linux内核版本
设置主机名称为k8s-master,重新连接显示生效
查看主机名称
禁用SELinux
永久禁用SELinux
临时 禁用SELinux,让容器可以读取主机文件系统
关闭系统Swap
配置docker国内镜像加速
修改daemon.json 文件,没有就创建一个
重新加载配置
重启docker
如果遇到此错误
failure: repodata/repomd.xml from kubernetes: [Errno 256] No more mirrors to try.
cat <
https://blog.csdn.net/opp003/article/details/126172084
如果你使用的 Ubuntu 或其他 Linux 发行版,内建支持 snap 包管理工具, 则可用 snap 命令安装 kubectl。
snap install kubectl --classic
kubectl version --client
如果你使用 Linux 系统,并且装了 Homebrew 包管理工具, 则可以使用这种方式安装 kubectl。
brew install kubectl
kubectl version --client
验证 kubectl 配置
kubectl 的可选配置和插件
可以用命令 type _init_completion 检查 bash-completion 是否已安装
安装 bash-completion
依据包管理工具的实际情况,你需要在 ~/.bashrc 文件中手工导入此文件
安装
ubuntu
centos
kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。
kubeadm 不能帮你安装或者管理 kubelet 或 kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配
kubelet 的版本不可以超过 API 服务器的版本
wsl不支持systemctl命令,可以使用service命令代替
wsl启动docker返回成功,但是服务未启动
Minikube是一种轻量化的Kubernetes集群,是Kubernetes社区为了帮助开发者和学习者能够更好学习和体验k8s功能而推出的
https://www.yuque.com/leifengyang/oncloud/ctiwgo
解决kubectl get pods提示connection localhost:8080 was refused
解决kubectl apply -f calico.yaml报错: no matches for kind “PodDisruptionBudget“ in version “policy/v1“
https://blog.csdn.net/LRXmrlirixing/article/details/126648454
重新下载正确版本calico
$ kubectl get pod [-o wide] [-n NAMESPACE | -A]
拷贝文件到pod容器
从POD的容器里拷出来
注:
实时查看
格式:
创建Deployment和Service资源
创建+更新,可以重复使用
应用资源,该目录下的所有 .yaml, .yml, 或 .json 文件都会被使用
创建命名空间
查看默认命名空间中所有的资源信息(pod、service、deployment、replicaset)
查看指定命令空间下面的pod/svc/deployment
$ kubectl get pod/svc/deployment [-o wide] -n NAMESPACE
查看所有namespace下面的pod/svc/deployment
查看node节点列表
显示node节点的标签信息
查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
查看命名空间
查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息
查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
根据yaml文件删除对应的资源,但是yaml文件并不会被删除,这样更加高效
根据deployment资源来进行删除,会同时删除deployment、pod和service资源
根据label删除
$ kubectl delete pod -l app=APP [-n NAMESPACE]
强制立即删除某pod。注:无法删除对应的应用,因为存在deployment/rc之类的副本控制器,删除pod也会重新拉起来
$ kubectl delete pod POD --grace-period=0 --force [-n NAMESPACE]
$ kubectl delete pod podName --now [-n NAMESPACE]
删除所有pod
在集群中创建并运行一个或多个容器
示例:运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例
示例:运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例,并绑定到k8s-node1上
创建一个service服务,并且暴露端口让外部可以访问
指定deployment、service、replica set、replication controller或pod,并使用该资源的选择器作为指定端口上新服务的选择器。deployment 或 replica set只有当其选择器可转换为service支持的选择器时,即当选择器仅包含matchLabels组件时才会作为暴露新的Service。
资源包括(不区分大小写):
语法
示例:创建一个nginx服务并且暴露端口让外界可以访问
$ kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service
为RC的nginx创建service,并通过Service的80端口转发至容器的8000端口上
由“nginx-controller.yaml”中指定的type和name标识的RC创建Service,并通过Service的80端口转发至容器的8000端口上
配置应用的一些特定资源,也可以修改应用已有的资源
使用 kubectl set --help查看,它的子命令,env,image,resources,selector,serviceaccount,subject。
语法:
set resources
kubectl set resources 命令:这个命令用于设置资源的一些范围限制。
资源对象中的Pod可以指定计算资源需求(CPU-单位m、内存-单位Mi),即使用的最小资源请求(Requests),限制(Limits)的最大资源需求,Pod将保证使用在设置的资源数量范围。
可用资源对象包括(支持大小写):replicationcontroller、deployment、daemonset、job、replicaset。
将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
设置所有nginx容器中 Requests和Limits
删除nginx中容器的计算资源值
set selector
kubectl set selector 命令
要求
注意:
语法:
set image
kubectl set image 命令:用于更新现有资源的容器镜像。
可用资源对象包括:
语法:
image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
将deployment中的nginx容器镜像设置为“nginx:1.9.1”
所有deployment和rc的nginx容器镜像更新为“nginx:1.9.1”
将daemonset abc的所有容器镜像更新为“nginx:1.9.1”
从本地文件中更新nginx容器镜像
编辑Deployment nginx的一些信息
编辑service类型的nginx的一些信息
label:更新资源上的标签
用于更新(增加、修改或删除)资源上的 label(标签)
语法:
label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
给名为foo的Pod添加label unhealthy=true
给名为foo的Pod修改label 为 "status" / value "unhealthy",且覆盖现有的value
给 namespace 中的所有 pod 添加 label
仅当resource-version=1时才更新 名为foo的Pod上的label
删除名为“bar”的label 。(使用“ - ”减号相连)
annotate:更新注解信息
更新一个或多个资源的Annotations信息。也就是注解信息,可以方便的查看做了哪些操作。
语法:
更新Pod“foo”,设置annotation “description”的value “my frontend”,如果同一个annotation多次设置,则只使用最后设置的value值
更新Pod"foo",设置annotation“description”的value“my frontend running nginx”,覆盖现有的值
根据“pod.json”中的type和name更新pod的annotation
更新 namespace中的所有pod
只有当resource-version为1时,才更新pod "foo"
通过删除名为“description”的annotations来更新pod "foo"。
rollout:管理资源
用于对资源进行管理
可用资源包括:deployments,daemonsets。
子命令:
语法
kubectl rollout SUBCOMMAND
回滚到之前的deployment
查看daemonet的状态
查看历史版本
rolling-update:滚动更新资源
执行指定ReplicationController的滚动更新。
该命令创建了一个新的RC, 然后一次更新一个pod方式逐步使用新的PodTemplate,最终实现Pod滚动更新,new-controller.json需要与之前RC在相同的namespace下。
语法:
使用frontend-v2.json中的新RC数据更新frontend-v1的pod
使用JSON数据更新frontend-v1的pod
基于 stdin 输入的 JSON 替换 pod
更新frontend资源的镜像
更新frontend-v1资源名称为frontend-v2并更新镜像
scale:扩容或缩容(pod数)
扩容或缩容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod数量
scale也可以指定多个前提条件,如:当前副本数量或 --resource-version ,进行伸缩比例设置前,系统会先验证前提条件是否成立。这个就是弹性伸缩策略。
语法:
将名为foo中的pod副本数设置为3。
$ kubectl scale --replicas=3 rs/foo
输出
将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3
如果当前副本数为2,则将其扩展至3。
设置多个RC中Pod副本数量
autoscale:自动扩容或缩容
这个比scale更加强大,也是弹性伸缩策略 ,它是根据流量的多少来自动进行扩展或者缩容。
指定Deployment、ReplicaSet或ReplicationController,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的pod数量。
语法:
使用 Deployment “foo”设定,使用默认的自动伸缩策略,指定目标CPU使用率,使其Pod数量在2到10之间
使用RC“foo”设定,使其Pod的数量介于1和5之间,CPU使用率维持在80%
集群管理命令:certificate,cluster-info,top,cordon,uncordon,drain,taint
查看集群信息
将当前集群状态输出到 stdout
将当前集群状态输出到 /path/to/cluster-state
检测核心组件状态【如果你的集群运行不正常,这是一个很好的、进行第一次诊断检查的机会】
查看node/pod的资源使用情况。需要heapster 或metrics-server支持
查看日志:
设为不可调度状态:
解除不可调度状态
将pod从NODE-1节点赶到其他节点:
$ kubectl drain NODE-1
master不运行pod
查看kubelet进程启动参数
describe:显示特定资源的详细信息
查看my-nginx pod的详细状态
logs:打印日志
logs命令:用于在一个pod中打印一个容器的日志,如果pod中只有一个容器,可以省略容器名
语法
参数选项:
返回仅包含一个容器的pod nginx的日志快照
持续输出pod MyPod中的日志
持续输出pod MyPod中的容器web-1的日志
仅输出pod nginx中最近的20条日志
输出pod nginx中最近一小时内产生的所有日志
指定时间戳输出日志
返回pod MyPod中已经停止的容器web-1的日志快照
exec:进入容器进行交互
exec命令:进入容器进行交互,在容器中执行命令
语法
参数
在pod 123456-7890的容器ruby-container中运行“date”并获取输出
默认在pod 123456-7890的第一个容器中运行“date”并获取输出
切换到终端模式,将控制台输入发送到pod 123456-7890的ruby-container的“bash”命令,并将其输出到控制台/
错误控制台的信息发送回客户端。
attach:连接到一个正在运行的容器
kubectl attach POD [-c CONTAINER]
参数选项:
-c, --container=“”: 容器名。如果省略,则默认选择第一个 pod。
-i, --stdin[=false]: 将控制台输入发送到容器。
-t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。
获取正在运行中的pod 123456-7890的输出,默认连接到第一个容器
获取pod 123456-7890中ruby-container的输出
切换到终端模式,将控制台输入发送到pod 123456-7890的ruby-container的“bash”命令,并将其输出到控制台
其他命令:api-servions,config,help,plugin,version
api-servions命令:打印受支持的api版本信息
打印当前集群支持的api版本
help命令:用于查看命令帮助
显示全部的命令帮助提示
具体的子命令帮助,例如
config 命令:用于修改kubeconfig配置文件(用于访问api,例如配置认证信息)
设置 kubectl 与哪个 Kubernetes 集群进行通信并修改配置信息。查看 使用 kubeconfig 跨集群授权访问 文档获取详情配置文件信息。
示例
显示合并的 kubeconfig 配置
查看配置的摘要(上下文、命名空间)
同时使用多个 kubeconfig 文件并查看合并的配置
获取 e2e 用户的密码
查看当前使用的上下文
设置默认的上下文
使用特定的用户名和命名空间新增一个上下文,并设置为默认的上下文。
更改当前上下文的命名空间
恢复到默认命名空间
删除指定的上下文
添加新的集群配置到 kubeconf 中,使用 basic auth 进行鉴权
version 命令:打印客户端和服务端版本信息
打印客户端和服务端版本信息
plugin 命令:运行一个命令行插件
apply命令:通过文件名或者标准输入对资源应用配置
通过文件名或控制台输入,对资源进行配置。 如果资源不存在,将会新建一个。可以使用 JSON 或者 YAML 格式。
语法
参数选项:
将pod.yaml中的配置应用到pod
将控制台输入的Yaml配置应用到Pod
patch命令:使用补丁修改,更新资源的字段,也就是修改资源的部分内容
语法:
使用策略合并补丁部分更新节点
更新一个容器的镜像;Spec.containers.name是必需的,因为它是一个合并键
replace命令: 通过文件或者标准输入替换原有资源
语法:
使用pod.yaml中的数据替换一个pod
根据传递到标准输入的YAML替换一个pod。
将单容器pod的镜像的版本(标记)更新为v4
强制替换、删除然后重新创建资源
convert命令:转换配置文件为不同的API版本,支持YAML和JSON格式。
该命令将配置文件名,目录或URL作为输入,并将其转换为指定的版本格式,如果目标版本未指定或不支持,则转换为最新版本。
默认输出将以YAML格式打印出来,可以使用- o选项改变输出格式。
语法:
将文件"pod.yaml"转换为最近版本并打印到标准输出
将“pod.yaml”指定的资源的实时状态转换为最新版本,并以json格式打印到标准输出
将当前目录下的所有文件转换为最新版本,并将其全部创建
格式化输出
所有kubectl命令的默认输出格式是人类可读的纯文本格式。
导出配置文件
导出proxy的配置为yaml文件
导出kube-dns的deployment和services的配置为yaml文件
导出所有 configmap
https://kubernetes.io/zh-cn/docs/tasks/run-application/
查看、编辑某个pod的配置
补充
使用jsonpath输出的配置内容(可以愉快的复制粘贴了,更方便修改):
现在你需要修改这个配置,比如加几个key,你可能会怒砸屏幕键盘,那么如何更优雅的修改配置呢
开局一张图,剩下的就全靠编了[{"src":"xap:resources/b75f46ce17ec875daf362aa3880c92988b93e234d231b97e1d368712eb9cc28e.png","width":213,"height":133}]
完整的操作
1.打开后端服务找到config.yaml文件,当然也可能是其他名字
2.修改内容变成你需要的样子,然后使用cv大法
3.在服务端上新建一个yaml文件
4.编写yaml内容
注意事项:后端服务里面的confi.yaml拷贝出来的内容不一定完整,不完整的内容需要自己手动冲突
这里着重介绍一个|-符号:
1.使用“|-”处理多行文本,详细解释:
在 YAML 文件中,符号 |- 是一个折叠标记(Folded Block Style),它用于指示如何处理多行字符串。使用该标记时,会忽略所有换行符,并将文本块中的所有行连接成一个单独的字符串。
例如,以下 YAML 代码段中:
description: |This is a longdescription that spansmultiple lines.
使用 |- 标记后,字符串将被折叠为:
请注意,在使用 |- 标记时,每一行末尾的空格都将被保留。如果您不希望保留这些空格,则可以使用 |+ 标记,它表示保留所有空格,包括行末尾的空格
2.缩进的时候不要使用\t,改用空格代替
例如:我现在这个项目:后端服务的config.yaml其实只是k8s的一个key的内容,data.yaml
一个完整的k8s配置文件(来自chatgpt的回答):
- apiVersion: v1kind: Podmetadata: name: example-podspec: containers: - name: example-container image: nginx ports: - containerPort: 80 volumeMounts: - name: data-volume mountPath: /usr/share/nginx/html volumes: - name: data-volume configMap: name: example-configmap
apiVersion: v1kind: ConfigMapmetadata: name: example-configmapdata: index.html: "Hello, Kubernetes!
"
Hello, Kubernetes!
,可以被挂载到 Pod 中作为卷使用。首先来个套娃命令
xargs介绍(来自chatgpt回答)
顺带介绍linux三剑客
Linux三剑客指的是grep、sed和awk,它们都是常用的文本处理工具。
grep(全称Global Regular Expression Print):是一个用于在文件中搜索给定文本模式的命令行工具。grep可以查找文件内容中符合特定条件的行,并将它们输出到控制台或者其他文件中。例如,我们可以使用grep "apple" file.txt来查找file.txt中包含“apple”的行。
grep是一个非常有用的命令行工具,它可以用来查找文本文件中的匹配项。除了最基本的用法(例如在文件中查找单词或短语),grep还有一些高级用法,可以让您更加准确地查找所需的内容。
以下是一些grep的高级用法:
使用正则表达式:grep支持使用正则表达式进行模式匹配。这意味着您可以使用各种通配符和元字符来更精确地定义您要查找的内容。
查找多个模式:grep允许你同时查找多个模式。例如,如果您要查找包含单词“apple”或“orange”的行,可以使用以下命令:
搜索多个文件:grep可以搜索多个文件并将匹配的行打印出来。例如,如果您要在目录下的所有.txt文件中查找单词“banana”,可以使用以下命令:
反向搜索:默认情况下,grep只显示匹配的行。但是,您也可以使用-v选项来反向搜索,即显示不匹配的行。
这些是grep的一些高级用法。它们可以大大提高您在文本文件中查找内容的效率和准确性。
sed(全称Stream Editor):是一个非交互式的流编辑器。sed可以对文本进行一系列操作,如替换、删除、插入等等。它通过读取输入流并对其进行处理,然后将结果输出到标准输出或指定文件中。例如,我们可以使用sed "s/apple/orange/" file.txt来将file.txt中所有的“apple”替换为“orange”。
awk:是一种强大的文本处理语言,它可以完成比grep和sed更复杂的文本操作。awk支持多种内置函数、逻辑判断、循环等高级编程功能。与grep和sed不同,awk可以将数据分解成字段,并按照需要对每个字段进行操作。例如,我们可以使用awk "{print $3}" file.txt来输出file.txt中每行的第三个字段。
三剑客工具的组合可以完成各种文本处理任务,而且它们都是Linux系统自带的工具,无需安装额外软件即可使用
配合awk一键查询指定pod的配置
kubectl -n app get pod|grep user|awk "{print $1}"|xargs kubectl -n app logs --tail 50 -f
没用他之前可能需要两个命令
查找pod
根据输出的pod查询日志
配合awk一键重启指定pod
kubectl -n app get pod|grep user|awk "{print $1}"|xargs kubectl -n app delete pod
没用他之前可能需要两个命令
查找pod
根据输出的pod,在删除他
配合awk一键重启指定kill进程进程
ps -ef|grep filter_condition|grep -v grep|awk "{print $2}"|xargs sudo kill -9
没用他之前可能需要两个命令
查找指定进程
ps -ef|grep filter_condition|grep -v grep
grep -v grep
kill查找出来的进程
上一篇:西安饮食:截止2023年3月31日公司股东人数已在一季报中披露
下一篇:最后一页
X 关闭
X 关闭
5月20日,在建的广西最长跨海大桥——龙门大桥东主塔顺利封顶。至此,龙门大桥东、西两岸主塔全部实现封顶,标志着该桥进入缆索系统施工阶
中新网上海3月30日电 (记者 陈静)上海正面临常态化防控以来疫情形势最严峻复杂的挑战,单日新增阳性感染者数量不断刷新纪录。记者30日获
中新网3月30日电 据国家地震台网官方微博消息,中国地震台网正式测定:3月30日18时14分在新疆和田地区皮山县(北纬36 01度,东经77 89度)发
上海市委常委会今天上午(3月30日)举行会议,听取当前疫情应急处置和核酸筛查相关工作汇报,研究部署下一步疫情防控重点工作。市委书记
(抗击新冠肺炎)江苏无锡一男子隐匿行程轨迹被警方立案侦查 中新网无锡3月30日电 (记者 孙权)3月30日,无锡市在“应检尽检”人员核
(抗击新冠肺炎)官方称吉林市疫情扩散势头得到遏制 中新网吉林3月30日电 (记者 石洪宇)记者30日从吉林市政府新闻办召开的疫情防控
中新网唐山3月30日电 (白云水 孟潮)3月30日,河北省唐山市召开新冠肺炎疫情防控工作新闻发布会通报称,3月29日0时至24时,唐山市新增
浙江省嘉兴市秀洲区新型冠状病毒感染肺炎疫情防控指挥部办公室发布通告: 3月30日上午,秀洲区发现1例新冠肺炎阳性感染者,该感染者
今天(3月30日)下午,新疆乌鲁木齐市人民政府新闻办公室召开疫情防控新闻发布会,通报乌鲁木齐市新冠肺炎疫情和疫情防控最新情况。会上
中新网天津3月30日电 (记者 王君妍)记者30日从天津市水务局获悉,为充分发挥河湖长制优势,近日,天津市将南水北调中线天津干线(天津