墨风如雪博客

  • 源码小店
  • 导航站
  • 登录
  • java
  • 资源分享
让AI使用变得如此简单
  1. 首页
  2. k8s
  3. 正文

K8s常用命令和使用技巧(超详细)

2023年 4月 30日 198点热度 2人点赞 0条评论
安装tab提示 新开通的阿里云服务器是默认最小安装 使用没有需要自己手动安装
yum install -y bash-completion
安装docker
1、移除以前docker相关包
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2、配置yum源
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装docker
#以下是在安装k8s的时候使用
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
4、启动
systemctl enable docker --now
配置加速
这里额外添加了docker的生产环境核心配置cgroup
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://isxavja9.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF sudo systemctl daemon-reload sudo systemctl restart docker
K8s Kubeclt的基础命令
# 查看所有的资源信息
$ kubectl get all
$ kubectl get --all-namespaces
# 查看pod列表
$ kubectl get pod
# 显示pod节点的标签信息
$ kubectl get pod --show-labels
# 根据指定标签匹配到具体的pod
$ kubectl get pods -l app=example
# 查看node节点列表
$ kubectl get node
# 显示node节点的标签信息
$ kubectl get node --show-labels
# 查看pod详细信息,也就是可以查看pod具体运行在哪个节点上(ip地址信息)
$ kubectl get pod -o wide
# 查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
$ kubectl get svc
$ kubectl get svc -n kube-system
# 查看命名空间
$ kubectl get ns
$ kubectl get namespaces
# 查看所有pod所属的命名空间
$ kubectl get pod --all-namespaces
# 查看所有pod所属的命名空间并且查看都在哪些节点上运行
$ kubectl get pod --all-namespaces -o wide
# 查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息
$ kubectl get rs
# 查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
$ kubectl get deploy -o wide
$ kubectl get deployments -o wide
run 命令:在集群中创建并运行一个或多个容器镜像。run 命令:在集群中创建并运行一个或多个容器镜像。
语法:run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
# 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例 $ kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
# 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例,并绑定到k8s-node1上$ kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}'
expose 命令:创建一个service服务,并且暴露端口让外部可以访问
# 创建一个nginx服务并且暴露端口让外界可以访问
$ kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service
set 命令:配置应用的一些特定资源,也可以修改应用已有的资源
使用 kubectl set --help
查看,它的子命令,env,image,resources,selector,serviceaccount,subject。
语法:resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]
# 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
$ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
# 设置所有nginx容器中 Requests和Limits
$ kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
# 删除nginx中容器的计算资源值
$ kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0
explain 命令:用于显示资源文档信息
$ kubectl explain rs
edit 命令: 用于编辑资源信息
# 编辑Deployment nginx的一些信息 $ kubectl edit deployment nginx
# 编辑service类型的nginx的一些信息 $ kubectl edit service/nginx
设置命令:label,annotate,completion
label命令: 用于更新(增加、修改或删除)资源上的 label(标签)
  • label 必须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符。
  • 如果 --overwrite 为 true,则可以覆盖已有的label,否则尝试覆盖label将会报错。
  • 如果指定了--resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。
:label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
# 给名为foo的Pod添加label unhealthy=true $ kubectl label pods foo unhealthy=true
# 给名为foo的Pod修改label 为 'status' / value 'unhealthy',且覆盖现有的value $ kubectl label --overwrite pods foo status=unhealthy
# 给 namespace 中的所有 pod 添加 label $ kubectl label pods --all status=unhealthy
# 仅当resource-version=1时才更新 名为foo的Pod上的label $ kubectl label pods foo status=unhealthy --resource-version=1
# 删除名为“bar”的label 。(使用“ - ”减号相连) $ kubectl label pods foo bar-
集群故障排查和调试命令:describe,logs,exec,attach,port-foward,proxy,cp,auth
describe命令:显示特定资源的详细信息
# 查看my-nginx pod的详细状态 $ kubectl describe po my-nginx
logs命令:用于在一个pod中打印一个容器的日志,如果pod中只有一个容器,可以省略容器名
kubectl logs [-f] [-p] POD [-c CONTAINER]
# 返回仅包含一个容器的pod nginx的日志快照 $ kubectl logs nginx
# 返回pod ruby中已经停止的容器web-1的日志快照 $ kubectl logs -p -c ruby web-1
# 持续输出pod ruby中的容器web-1的日志 $ kubectl logs -f -c ruby web-1
# 仅输出pod nginx中最近的20条日志 $ kubectl logs --tail=20 nginx
# 输出pod nginx中最近一小时内产生的所有日志 $ kubectl logs --since=1h nginx
参数选项:
  • -c, --container="": 容器名。
  • -f, --follow[=false]: 指定是否持续输出日志(实时日志)。
  • --interactive[=true]: 如果为true,当需要时提示用户进行输入。默认为true。
  • --limit-bytes=0: 输出日志的最大字节数。默认无限制。
  • -p, --previous[=false]: 如果为true,输出pod中曾经运行过,但目前已终止的容器的日志。
  • --since=0: 仅返回相对时间范围,如5s、2m或3h,之内的日志。默认返回所有日志。只能同时使用since和since-time中的一种。
  • --since-time="": 仅返回指定时间(RFC3339格式)之后的日志。默认返回所有日志。只能同时使用since和since-time中的一种。
  • --tail=-1: 要显示的最新的日志条数。默认为-1,显示所有的日志。
  • --timestamps[=false]: 在日志中包含时间戳。
exec命令:进入容器进行交互,在容器中执行命令
kubectl exec POD [-c CONTAINER] -- COMMAND [args...]
命令选项:
  • -c, --container="": 容器名。如果未指定,使用pod中的一个容器。
  • -p, --pod="": Pod名。
  • -i, --stdin[=false]: 将控制台输入发送到容器。
  • -t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。
# 进入nginx容器,执行一些命令操作 $ kubectl exec -it nginx-deployment-58d6d6ccb8-lc5fp bash
attach命令:连接到一个正在运行的容器。
kubectl attach POD -c CONTAINER
参数选项:
  • -c, --container="": 容器名。如果省略,则默认选择第一个 pod。
  • -i, --stdin[=false]: 将控制台输入发送到容器。
  • -t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。
# 获取正在运行中的pod 123456-7890的输出,默认连接到第一个容器 $ kubectl attach 123456-7890 # 获取pod 123456-7890中ruby-container的输出 $ kubectl attach 123456-7890 -c ruby-container # 切换到终端模式,将控制台输入发送到pod 123456-7890的ruby-container的“bash”命令,并将其输出到控制台/ # 错误控制台的信息发送回客户端。 $ kubectl attach 123456-7890 -c ruby-container -i -t
1、基础环境
所有机器执行以下操作
配置NetworkManager
NetworkManager 操作默认网络中接口的路由表 命名空间,其中 Calico veth 对被锚定以连接到容器。 这会干扰 Calico 代理正确路由的能力。
在以下位置创建配置文件 /etc/NetworkManager/conf.d/calico.conf阻止 NetworkManager 干扰接口:
[keyfile] unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico
需要找对应版本 负责会出现安装错误(前面安装3.23.3安装出现问题)
https://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml
一定要注意,如果是单机版,则直接master-ip:port即可以访问,如果是云版本,一定到找到pod对应的node,然后浏览器访问 node-ip:port访问,我之前不知道,部署成功后也一直访问失败,官网上有说明,但没有看到整了好久。
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: k8s 命令 配置
最后更新:2023年 5月 2日

墨风如雪

一个热爱生活,热爱分享的程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

墨风如雪

一个热爱生活,热爱分享的程序员

最新 热点 随机
最新 热点 随机
告别机械感!OpenAudio S1让AI声音活起来 Sora触手可及!微软必应AI视频生成器,全民创作时代来临? 阿里WebAgent开源:引领自主搜索新纪元 重磅炸弹!字节跳动开源BAGEL:70亿参数,统一多模态理解与生成,AI“全能王”诞生记! 小米MiMo-VL:7B参数,怎么就成了多模态界的“越级打怪王”? 炸裂!DeepSeek 8B 量化版降临:告别显存焦虑,你的 3080 Ti 也能玩转顶级大模型了!
ComfyUI“打通任督二脉”:直接调用Veo2、GPT-4o等65大模型!一键串联你的AI工作流AI圈炸锅了!Mistral Medium 3:性能 SOTA,成本打骨折,企业玩家的新宠?字节终于开源“扣子”同款引擎了!FlowGram:AI 时代的可视化工作流利器告别“微信黑箱”!Chatlog:让你的聊天记录也能拥有“AI大脑”!字节跳动 Seed-Coder-8B:不靠人工洗数据,这80亿参数的小模型如何写出顶尖代码?85倍速的视觉革命:苹果发布 FastVLM,让你的 iPhone ‘看图说话’,快到飞起!
字节跳动 Seed-Coder-8B:不靠人工洗数据,这80亿参数的小模型如何写出顶尖代码? java 分布式缓存框架Redis的(超详细总结) 字节终于开源“扣子”同款引擎了!FlowGram:AI 时代的可视化工作流利器 不只靠“堆参数”:Qwen新突破ParScale,用“并行”让模型更聪明 让你轻松get到AutoGPT:详细安装教程 SQL相关命令合集(MySQL)
标签聚合
设计模式 AI 算法 spring 动态规划 java deepseek 教程

COPYRIGHT © 2023 墨风如雪博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

免责声明 - 隐私政策