在k8s中创建资源和查看信息
-1 通过run命令创建资源
% kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
上述命令表示以gcr.io/google-samples/kubernetes-bootcamp:v1作为image,创建一个名字为kubernetes-bootcamp的replication controller,并在自动分配的node上创建pod,然后运行对应的container,container在node host上映射的端口为8080;
-2 通过通过yaml文件创建资源(其他还支持操作get|apply|delete)
% kubectl create -f resource.yaml
-3 对k8s cluster里指定的资源进行操作
针对资源
deployment / pod / service / nameSpace / network / replicationSet
可执行
get / describe / logs / exec / explain
动作
% kubectl get deployments
% kubectl get pods
% kubectl get services
列出每个pod运行的详细信息,包含当前所在的node和ip,除了wide还有yaml和json格式的输出
% kubectl get pods -o wide
根据标签值筛选pod,列出标签中env=prod并且app=front的pod
% kubectl get pod -l env=prod, app=front
kubectl get动作缺省时从default的namespace下获取资源,namespace为不同的资源进行了大的分类,从而可提供如dev, test, prod, user, private, public等不同的区域;
$ kubectl label node {node-name}disk=ssd
除了pod可以添加标签,其他资源如node也可以添加标签;在创建DaemonSet类型的pod时,pod模板中nodeSelector指定具有期望label的node,调度的时候则DaemonSet仅在指定的node上运行;
1 apiVersion: V1 2 kind: DaemonSet 3 metadata: 4 name: ssd-monitor 5 spec: 6 selector: 7 matchLabels: 8 app: kubia 9 template: 10 spec: 11 nodeSelector: 12 disk: ssd
在指定命名空间下创建pod
% kubectl create namespace dev
% kubectl create -f front.yaml --namespace dev
-4 通过replication controller逐步替换的方式升级指定service(deployment)下的pod,从而实现不停机升级;
% kubectl rolling-update {rc-old} {rc-new} --image={new-image}
基于new-image和rc-old创建rc-new,逐步替换rc-old控制的pod,rc-new每创建一个新的pod,rc-old则删除一个旧的pod,并切换流量,最终完全替换rc-old的pod;
但这样的滚动升级方式是通过rc-old的kubectl调用master api server实现的扩容、缩容,一旦rc-old kubectl所在的node网络出现问题,则rc-new可能处于中间状态;因此推荐使用Deployment的方式进行pod的创建和状态维护。
-5 将指定的deployment进行扩容,实际是修改replicationController的spec.replicas字段
% kubectl scale deployments/kubernetes-bootcamp --replicas=4
变更指定deployment的image,触发内部pod的rolling-update
% kubectl set image deployment kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
查看deployment中pod当前的升级部署状态,和历史升级记录
% kubectl rollout status deployment {deployment-name}
% kubectl rollout history deployment {deployment-name}
一旦新的image有问题则将pod的image回滚到指定版本
% kubectl rollout undo deployment {deployment-name} --to-version={#}
为deployment foo创建autoScaler,当cpu使用率达到80%时,replicaSet会至多创建5个pod提供扩容服务;
% kubectl autoscale deployment foo --min=2 --max=5 --cpu-percent=80
-6 service通过LabelSelector将多个pods组建成一个逻辑分组,pods通过endpoints提供连接service,并定义某种可expose到外网访问的策略,逻辑分组内的pods可分布于不同的nods上,因此service需要处理当某个node意外下线后,利用ReplicaSet将一同下线的pods在其他node上进行重建,同时保证新建的pods外网可访问;
% kubectl expose deployment kubernetes-bootcamp --type=LoadBalancer --port=8080
上述命令表示以名字kubernetes-bootcamp的deployment运行的pod为基础创建一个service,并以LoadBalancer的方式对外进行暴露,container在node host上映射的端口为8080;
执行下属命令可以进入到具体pod内,并执行命令:
% kubectl exec -it hello-node-67f857c88c-rfdls /bin/bash
针对指定的pod执行命令:
$ kubectl exec {pod-name} {cmd-to-exec}
获取指定pod的环境变量,
$ kubectl exec {pod-name} env
pod的元数据可以通过env项提供,但一旦pod元数据被更新,env变量的值将不会同步更新,因此推荐通过绑定downwardAPI卷的形式,将指定的pod元数据挂载到指定目录,并可进行同步更新,但仅限于单个pod的元数据,想要获取整个k8s的元数据还是需要通过k8s API server处获取;
获取当前cluster的kube master,kube dns等运行信息
% kubectl cluster-info
获取当前k8s支持的api版本信息,yaml文件中需要指定匹配的api version:
% kubectl api-versions
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?