k8s的陈述式管理

k8s的陈述式管理:

所谓的陈述式管离=也就是命令行工具

优点:90%以上都可以满足

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

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

声明式:

k8s当中的YAML文件来实现资源管理----声明式

GUI:图形化工具管理

今天的主要任务:

1.kubectl命令的详解 查看 部署 查看pod的情况(详细信息和日志以及如何发布和回滚)

k8s命名行大全:

http://docs.kubernetes.org.cn/683.html

查看版本

kubectl version

查看所有api的资源对象名称

kubectl api-resources

查看k8s集群的信息

kubectl cluster-info

查看master节点的状态

kubectl get cs

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

kubectl get pods

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

kubectl get ns

查看指定命名空间内的pod,需要加-n 后面更上命名空间的名称

kubectl get pod -n kube-system

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

kubectl get pod -o wide

查询节点信息和状态

kubectl get nodes

查看node节点的详细信息

kubectl get nodes -o wide

查看已经部署好的pod信息

kubectl get pod

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

kubectl describe pod nginx-5f447ccb-9vkjp (pod名)

查看指定命名空间的pod

kubectl describe pod -n kube-system etcd-master01

如何查看pod内部的日志

kubectl logs nginx-5f447ccb-9vkjp

动态查看

kubectl logs -f nginx-5f447ccb-9vkjp

如何创建,删除命名空间

如何删除pod

先声明动作,再删除

如何对pod部署

Deplyoment的部署pod:

陈述式部署:命令行

声明式:YAML文件部署

滚动更新:不式一次性的包所有pod全部部署,而是一个一个来,pod的更新时使用,他的状态是逐渐的引用新的pod,逐渐的减旧的pod

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

回滚:如果更新有问题,deployment会手动还原到未更新前的状态

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

上述的功能必须是基于deployment创建的服务才可以,绝大多数的pod创建都是deployment

查看当前集群当中默认命名空间里面的deployment创建的

kubectl get deployments.apps

daemonsets.apps 方式的创建方式

kubectl get daemonsets.apps

kubectl get daemonsets.apps -n kube-system

daemonsets.apps:不能通过命令行的方式创建,只能在YAML文件当中创建方式,后台运行创建,在每一个节点上都创建一个相同方式的,相同版本的容器运行的pod

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

演示指定命名空间创建

kubectl create ns kobe

kubectl create deployment nginx-kobe --image=nginx --replicas=3 -n kobe

kubectl get pod -n kobe

如何删除pod

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

那怎么删除呢

kubectl delete deployments.apps nginx-wdf

指定命名空间删除

kubectl delete -n kobe deployments.apps httpd-kobe

基于deployment方式创建的pod,一旦删除deployment,基于这个deployment创建的pod都会被删除

查看创建方式

kubectl get deployments.apps nginx

远程进入节点容器:

kubectl get pod -o wide

kubectl exec -it nginx-5f447ccb-vd8w8 bash

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

指定命名空间进入容器

kubectl create deployment nginx-kobe1 --image=nginx -n kobe

kubectl get pod -n kobe

kubectl exec -it -n kobe nginx-kobe1-7bfdff54bf-p55nr bash

快速结束容器

kubectl delete pod nginx-kobe-79f486588-c26qn --force --force --grace-period=0

grace-period=0:表示过渡的存活期,默认是30秒,可以让容器优雅的结束容器内的进程,然后退出pod,等于0表示立刻退出,但是前面必须要有--force

注意:还是没有根除,还是等于重启,主要是用于结束卡在销毁状态的pod,为了就是快速重启,节约时间

如何对的deployment创建的扩缩容replicas指定副本数

kubectl scale deployment nginx-kobe --replicas=5

kubectl scale deployment nginx-kobe --replicas=1

创建时并没有指定副本数,后续也可以对他的副本数进行修改,仅限于deployment模式

如何把服务的service进行发布:

kubectl create deployment nginx --image=nginx:1.10 --replicas=3

Service的类型;

kubectl get service -n kube-system 指定查看

第一种类型ClusterIP:

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

第二种类型NodePort(常用):

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

Nodeip:nodeport

随机指派,也可以指定,范围在30000-32767

如和创建呢,还是基于deployment创建pod

kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

--port=80 servicce集群的端口(集群内部访问的端口,可以改动)

--target-port=80 pod内部容器的端口(一般是固定的)

root@master01 \~\]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 \ 443/TCP 24h nginx-service NodePort 10.96.114.241 \ 80:30691/TCP 10s 10.96.114.241 :集群内部的IP地址,外部不可用访问这个IP地址的 80:对应的是内部的service的端口 30691:和内部service的80端口做映射 解析图: ![](https://file.jishuzhan.net/article/1743622038255308801/84e4b2e25311d76cef7729df99420a91.webp) 实现负载均衡: 分别进入三个容器 kubectl exec -it nginx-6799fc88d8-dz5g4 bash ![](https://file.jishuzhan.net/article/1743622038255308801/9ccc036cfa7fe754c42ffafed352f61e.webp) ![](https://file.jishuzhan.net/article/1743622038255308801/a7cbb6a6c98c09f448f40f807e455390.webp) 这只是内部访问端口 外部访问端口,本机IP+端口 ![](https://file.jishuzhan.net/article/1743622038255308801/a71ff730cf79aad80d0298d815860de5.webp) 改端口: kubectl get service ![](https://file.jishuzhan.net/article/1743622038255308801/2453840c9858643eea1195df095c4419.webp) ![](https://file.jishuzhan.net/article/1743622038255308801/a6d28279f9f2694db34513e0530bc44a.webp) #### ****第三种模式LoadBalance****r: 如果service的类型设定为LoadBalancer,映射地址(云平台提供LoadBalancer的地址),这种用法仅用于公有云服务供应在云平台上设置的service的场景,外部来访问,实现负载均衡,LoadBalancer这个地址是要付费的,不是免费的 创建好了service,指定类型为LoadBalancer,会给你提供一个地址来代理pod内部的IP地址 演示 kubectl expose deployment nginx1 --port=8080 --target-port=80 --name=nginx1-service --type=LoadBalancer ![](https://file.jishuzhan.net/article/1743622038255308801/4766680f7bf8681b194be1da876214a2.webp) ![](https://file.jishuzhan.net/article/1743622038255308801/f5d2253d13eb3756e34432705c7ee79c.webp) 内部访问没问题 ![](https://file.jishuzhan.net/article/1743622038255308801/8cdda08d3fc85fc80e82ac0f004f3188.webp) #### ****第四种类型ExternalName**** ****:**** DNS映射,给service分配一个域名,通过域名来访问后端pod资源,ExternalName的service类型,不能提供负载均衡,必须要设置一个ExternalName的地址可以实现 ### 配置文件演示: kubectl get service ![](https://file.jishuzhan.net/article/1743622038255308801/537137456e046f9beb1cfc975eba0827.webp) 做映射 ![](https://file.jishuzhan.net/article/1743622038255308801/7249e37b98fd640dd2dd2ea55e93bb6b.webp) 访问测试 ![](https://file.jishuzhan.net/article/1743622038255308801/5411214d0f5b0fd6c6a34b480eded94e.webp) 不能实现轮询,不能提供IP地址,只能通过映射访问 ****更新和回滚以及发布方式:**** 项目的生命周期: 创建(已演示)------发布(已演示)------更新------回滚--------删除 //获取修改模板 kubectl set image --help ![](https://file.jishuzhan.net/article/1743622038255308801/1bb2812f96c319fefe31f8a452883e85.webp) //查看当前 nginx 的版本号 curl - I 20.0.0.71:30691 ![](https://file.jishuzhan.net/article/1743622038255308801/52104ee18e20d64450b708cb8178d518.webp) //将nginx 版本更新为 1.15 版本 kubectl set image deployment/nginx nginx=nginx:1.15 动态查看更新情况 kubectl get pod -w ![](https://file.jishuzhan.net/article/1743622038255308801/80f9a5428739817165cc58f18be46cc3.webp) 回滚: 查看还原点: kubectl rollout history deployment nginx1 ![](https://file.jishuzhan.net/article/1743622038255308801/7a99a9d2d6313419a39a03a07ca400dc.webp) 数字的大小决定了距离上次操作远近,数字越大,就是你最近一次的操作 #加入record可以现在变更的原因: kubectl set image deployment nginx1 nginx=nginx:1.15 --record ![](https://file.jishuzhan.net/article/1743622038255308801/9a0f529f80abb6f8cfe72e008424f209.webp) 回到还原点: kubectl rollout undo deployment nginx1 --to-revison=1 ![](https://file.jishuzhan.net/article/1743622038255308801/32e536cdd3e11d1121b9bc7ee1c5b96c.webp) 查看还原状态 Kubectl rollout status deployment nginx1 ![](https://file.jishuzhan.net/article/1743622038255308801/884ffa5d2ce1b0c839bbb788165bf4a9.webp) 动态查看更新情况 kubectl get pod -w ![](https://file.jishuzhan.net/article/1743622038255308801/80f9a5428739817165cc58f18be46cc3.webp) 查看全部 kubectl get all -o wide kubectl get all -o wide -n kube-system

相关推荐
斯文by累1 小时前
解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式
运维·docker·容器
意倾城9 小时前
Docker数据卷
docker·容器
whgjjim9 小时前
docker迅雷自定义端口号、登录用户名密码
运维·docker·容器
爱吃芝麻汤圆12 小时前
k8s之Kubebuilder 的设计哲学
云原生·容器·kubernetes
裁二尺秋风14 小时前
k8s(12) — 版本控制和滚动更新(金丝雀部署理念)
云原生·容器·kubernetes
项目題供诗14 小时前
黑马k8s(六)
云原生·容器·kubernetes
Why not try?!16 小时前
Centos7 中 Docker运行配置Apache
运维·docker·容器
hnlucky17 小时前
如何彻底清空docker里面不使用的容器?
运维·docker·容器
帷幄庸者18 小时前
CentOS 上配置 Docker 使用 NVIDIA GPU
linux·docker·centos
有梦想的攻城狮18 小时前
mac本地docker镜像上传指定虚拟机
macos·docker·eureka