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

相关推荐
老年DBA3 小时前
Kubernetes 上的 GitLab + ArgoCD 实践(三):使用 ArgoCD 打通 CD 流程
kubernetes·gitlab·argocd
帅帅梓7 小时前
docker图形化管理
docker·容器·eureka
努力搬砖的咸鱼14 小时前
容器之间怎么通信?Docker 网络全解析
网络·docker·云原生·容器
liming49516 小时前
Ubuntu18.04部署k8s
云原生·容器·kubernetes
元直数字电路验证18 小时前
ASP.NET Core Web APP(MVC)开发中无法全局配置 NuGet 包,该怎么解?
前端·javascript·ui·docker·asp.net·.net
YC运维18 小时前
Kubernetes资源管理全解析
java·容器·kubernetes
Leinwin18 小时前
微软发布Azure Kubernetes Service Automatic国际版
microsoft·kubernetes·azure
chinesegf20 小时前
Docker篇6-项目app.py和flask_app.service配置和映射到docker中
docker·容器·flask
退役小学生呀20 小时前
二十二、DevOps:基于Tekton的云原生平台落地(三)
linux·云原生·容器·kubernetes·k8s·devops·tekton
维尔切20 小时前
搭建 k8s
云原生·容器·kubernetes