K8s陈述式资源管理

命令行:kubectl命令行工具

  • 优点:90%以上的场景都可以满足

对资源的增删改查比较方便,对改不是很友好。

  • 缺点:命令比较冗长,复杂,难记

声明式:

看到声明式都是k8s当中的yml文件来实现资源管理。

GUI:

图形化工具

kubectl命令的详解,查看,部署,查看pod的情况(详细信息,日志,发布和回滚)

相关命令字典:Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文档_Kubernetes中文社区

k8s中基本管理信息的查看

查看k8s的版本

复制代码
查看k8s的版本
kubectl version

k8s中所有资源对象和资源对象的简写

复制代码
kubectl api-resource

k8s的集群信息

复制代码
kubectl cluster-info

查看master节点的状态

复制代码
kubectl get cs

查看node节点的状态

复制代码
kubectl get pod
查看默认命名空间内的pod信息

kubectl get ns
查看当前集群所有的命名空间

kubectl get pod -n kube-system
-n来声明查看指定命名空间的资源

kubectl get pod -o wide 
查看默认命名空间内pod的详细信息
复制代码
kubectl get pod -n kube-system
-n来声明查看指定命名空间的资源
复制代码
kubectl get pod -o wide 

查看默认命名空间内pod的详细信息

查看指定命名空间的pod

复制代码
 kubectl get pod -n kube-system -o wide
复制代码
kubectl get node
查询节点的信息和状态

kubectl get node -o wide
查看node节点的详细信息

如何查看pod的详细信息

查看已经部署好的pod的详细信息

复制代码
kubectl get node
查看


详细查看
kubectl describle pod myapp-hj-567cb4489c-fq2fd

如果查看指定命名空间的内容,一定要加-n,不加则显示默认

如何查看pod内部的日志

复制代码
kubectl logs -f myapp-hj-567cb4489c-fq2fd


kubectl logs -n kube-system etcd-master01

kubectl create ns zzr

kubectl delete ns zzr
复制代码
kubectl delete pod myapp-hj-567cb4489c-fq2fd
先声明动作,再跟上对象,最后是对象的名称

pod的部署

deployment的部署pod:

陈述式部署:命令行

声明式:yml文件部署

滚动更新:不是一次性的把所有pod全部部署,而是一个一个来。pod的更新时使用,逐步引入新的pod,逐步减少旧的pod。

自我修复:如果有pod节点发生故障,deployment会自动启动新的pod来进行代替。

回滚:如果更新有问题,deployment会提供还原点,可以手动还原到未更新前的状态。

扩容和缩容:deployment可以随时调整pod的数量,以适应流量的变化。

上述的功能必须是基于deployment创建的服务才可以。绝大多数服务都是通过deployment来进行创建的

daemonset:不能通过命令行创建,只能在yml文件中定义这种创建方式。

后台运行创建,在每一个节点上都创建一个相同方式的,相同版本的容器运行的pod。

一般都是依赖环境和重要组件,一般也不会对这些资源进行操作。

复制代码
 kubectl get pod -n zzr


kubectl create deployment nginx-hj --image=nginx --replicas=3 -n zzr

kubectl get pod -n zzr

-n:指定命名空间

如果是基于deployment方式创建的pod,或者是daemonset方式创建的pod,是由控制器创建的pod,使用delete删除pod是删不掉的,相当于重启,

不是基于控制器创建的pod,是直接删除

远程进入节点容器

复制代码
 kubectl exec -it nginx-zzr-6bdd8bcbb5-c5tdv bash

docker的exec只能在本机内使用,不能跨主机,kubectl exec可以跨主机进入容器

复制代码
kubectl create deployment nginx-zzr --image=nginx --replicas=3 -n zzr

 kubectl exec -it nginx-zzr-6bdd8bcbb5-8ph4k bash -n zzr

 root@nginx-zzr-6bdd8bcbb5-8ph4k:/# echo k8s-nginx > /usr/share/nginx/html/index.html

 root@nginx-zzr-6bdd8bcbb5-8ph4k:/# echo k8s-nginx > /usr/share/nginx/html/index.html

如果有容器一直卡在"销毁"状态:

复制代码
kubectl delete pod 容器名 --force --grace-period=0

grace-period:表示过度存活期,默认是30秒。可以让pod优雅的结束容器内的进程,然后退出pod

=0:立刻停止pod,必须要有force才能实现

主要是用于结束卡在销毁状态的pod

对deployment创建的pod进行扩容和缩容

复制代码
 kubectl scale deployment 容器名 --replicas=所需副本数


 kubectl scale deployment myapp-hj --replicas=2

如何把服务的service进行发布

service的类型:

复制代码
kubectl get svc:查看当前命名空间的service

ClusterIP:

创建service的默认类型,提供一个集群内部的虚拟IP地址,这是service的默认类型。通过这个虚拟IP会直接访问pod的资源,无法对外提供访问。

NodePort:

会在每一个node节点上都开放一个相同的端口。外部可以通过node的本机ip+端口,访问pod资源。集群外部访问service资源的一种方式。四层代理方式。

nodeip:nodeport

随即指派,也可以指定30000-32767

基于deployment的创建方式

复制代码
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

kubectl get svc
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1      <none>        443/TCP        24h
myapp-zzr       ClusterIP   10.96.38.125   <none>        30000/TCP      20h
nginx-service   NodePort    10.96.181.60   <none>        80:31989/TCP   2s


10.96.232.240  集群内部的IP地址,外部是不可以访问这个IP地址

80:对应的是内部的service端口

31989:和内部的service的80端口做映射
复制代码
kubectl expose deployment nginx1 --port=8080 --target-port=80 --name=nginx1-service --type=NodePort

--port=8080:service和容器映射的端口,可以是任意
--target-port=80:容器内部的服务端口

如何实现负载均衡

复制代码
kubectl edit svc nginx-service
修改nodeport端口。

LoadBalancer:

如果service的类型设定为LoadBalancer,映射地址(云平台提供LoadBalancer地址)

公有云服务供应商在云平台上设置的service的场景。外部来访问,实现负载均衡。LoadBalancer这个地址是要付费的。

创建好了service,指定类型为LoadBalancer,会提供一个地址来代理pod内部的IP地址。

ExternalName:

DNS映射,给service分配一个域名,通过域名来访问后端pod资源。ExternalName的service类型,不能提供负载均衡,必须要设置一个LoadBalancer才可以实现。

做映射对外提供访问是nodeport

ExternalNmae需要映射

LoadBalancer需要花钱

更新和回滚以及发布的方式:

项目的生命周期:

创建------》发布------》更新-------》回滚------》删除

如何回滚:

查看回滚点:

复制代码
kubectl rollout history deployment nginx1
数字越大,就是最近的操作

如何给回滚点加表示

复制代码
 kubectl set image deployment nginx1 nginx=nginx:1.15 --record
复制代码
kubectl rollout undo deployment nginx1 --to-revision=1

如何查看

1.kubectl rollout status deployment nginx1

2.kubectl get pod -w

复制代码
kubectl rollout history deployment nginx1

kubectl get all
查看所有集群的信息
相关推荐
123过去1 小时前
ike-scan使用教程
linux·测试工具
疯狂吧小飞牛8 小时前
GPG基础指令
linux·服务器·网络
C++ 老炮儿的技术栈8 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
hjxu20169 小时前
【OpenClaw 龙虾养成笔记一】在远程服务器,使用Docker安装OpenClaw
服务器·笔记·docker
todoitbo9 小时前
用虚拟局域网打通 Win/Mac/Linux 三端:跨设备协作的实用方案
linux·运维·macos
源远流长jerry9 小时前
RDMA 基本操作类型详解:从双端通信到单端直访
linux·网络·tcp/ip·ip
Sylvia-girl10 小时前
Linux下的基本指令1
linux·运维·服务器
wyt53142911 小时前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
17(无规则自律)11 小时前
【Linux驱动实战】:字符设备之ioctl与mutex全解析
linux·c语言·驱动开发·嵌入式硬件
CDN36011 小时前
360CDN SDK 游戏盾:轻量化接入 + 强防护实测
运维·游戏·网络安全