kubectl 命令管理(1)
文章目录
- 一: 陈述式资源管理方法
- 1.1 查看版本信息和tab补全
- 1.2 基本信息查看
- 二: 项目的生命周期
- 2.1 使用kubectl run 命令创建并允许容器镜像
- 2.2 使用kubectl expose命令发布资源
- 2.2.1 发布
- 2.2.2 查看pod网络信息和service暴露端口
- 2.2.3 查看service关联的资源
- 2.2.4 在所有的node节点上查看负载均衡端口
- 2.3 使用kubectl set 命令更新资源信息
- 2.3.1 获取当前nginx的版本号
- 2.3.2 将版本跟新为1.15
- 2.4 使用kubectl rollout 对资源进行回滚
- 2.5 使用kubectl delete删除资源
- 三: 金丝雀发布(Canary Release)
- 3.1 什么是金丝雀发布
- 3.2 配置deployment使用金丝雀发布
- 3.2.1 发布nginx服务
- 3.2.1 更新deployment版本,并配置暂停deploymen
- 3.2.2 访问测试,查看版本号
- 3.2.3 在确保更新的pod没有问题后,继续更新
- 3.2.4 查看最后的更新情况
一: 陈述式资源管理方法
陈述式源管理方法:
- kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口
- kubect1是官方的CTL 命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径
- kubect1的命令大全
- kubectl --help
- k8s中文文档: http://docs.kubernetes.org.cn/683.html
4·对资源的增、删、查操作比较方便,但对改的操作就不容易了
1.1 查看版本信息和tab补全
#查看版本信息kubectl version
#配置kubectl 自动补全
source <(kubectl completion bash)#将命令写入到/root/.bashrc(root用户。如果是全局写入到/etc/bashrc),开机自动运行
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
#查看资源对象简写
kubectl api-resources
#查看集群信息
kubectl cluster-info
#动态查看服务日志信息,此命令是centos7 开始有的。-f 表示动态查看
journalctl -u kubelet -f
1.2 基本信息查看
kubectl get [-n namespace] [-o wide | json | yaml]
获取资源的相关信息
-n指定命名空间,
-o指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all (仅展示几种核心资源,并不完整)
–all-namespaces或-A :表示显示所有命令空间,
–show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app-nginx :仅显示包含app标签,且值为nginx的资源
#查看master 节点状态(可以简写cs)
[root@master ~]# kubectl get componentstatuses
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
#查看命名空间(可以简写ns)
[root@master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 21h #默认使用default命名空间
kube-node-lease Active 21h
kube-public Active 21h
kube-system Active 21h#查看defalut命名空间的所有资源(-n default 可以省略)
kubectl get all -n default
命名空间作用:用于允许不同 命名空间的相同类型的资源重名
#创建命名空间 test
kubectl create ns test#查看命名空间
kubectl get ns#删除命名空间test
kubectl delete ns test
#在命名空间kube-public 中创建副本控制器(deployment)来启动pod(nginx-wx),使用镜像nginx
kubectl create deployment nginx-wx --image=nginx -n kube-public#查看命名空间kube-public 里的所有资源
kubectl get all -n kube-public
#描述命名空间kube-public里的deployment 副本控制的详细信息
kubectl describe -n kube-public deployment nginx-wx #查看命名空间kube-public 里的pod(nginx-wx....)的详细信息
kubectl get pod -n kube-public nginx-wx-7d5458c6f5-hhjmh
#查看命名空间kube-public里pod信息(使用pod,pods都可以)kubectl get pods -n kube-public
#master节点上#查看kube-public命名空间里的pod信息。-o 指定输出方式
[root@master ~]# kubectl get pods -o wide -n kube-public#kubectl exec 跨主机登录docker
[root@master ~]# kubectl exec -it -n kube-public nginx-wx-7d5458c6f5-hhjmh bash#在容器里创建abc.txt
root@nginx-wx-7d5458c6f5-hhjmh:/# touch abc.txt
root@nginx-wx-7d5458c6f5-hhjmh:/# ls
root@nginx-wx-7d5458c6f5-hhjmh:/# exit#pod所在的node节点上
#找出对应容器的id
[root@node01 ~]# docker ps | grep 'nginx-wx'#进入容器查看
[root@node01 ~]# docker exec -it d07e bash
root@nginx-wx-7d5458c6f5-hhjmh:/# ls
#删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod 也会重新拉起来kubectl delete pod -n kube-public nginx-wx-7d5458c6f5-hhjmh#若pod始终无法删除(如一值处于terminatin)可以使用此命令强制删除kubectl delete pod -n kube-public nginx-wx-7d5458c6f5-rnhzc --force --grace-period=0#grace-period:表示过度存活期。默认时30s。在删除pod之前允许pod慢慢的终止其上的容器进程。0表示立即终止pod#--force 表示强制
#使用kubectl scale 进行扩容,缩容; --replicas=4 表示设置副本数为4
kubectl scale deployment -n kube-public nginx-wx --replicas=4#设置副本数为2
kubectl scale deployment -n kube-public nginx-wx --replicas=2
#删除kube-public命名空间的副本控制器 nginx-wx
kubectl delete deployment -n kube-public nginx-wx
#获取default命名空间里的资源(如果没有,就使用create命令创建一个)
kubectl get all#使用logs 查看资源日志
kubectl logs nginx-deployment-86b9454474-254n2
二: 项目的生命周期
项目生命周期: 创建—> 发布------> 更新------>回滚------->删除
2.1 使用kubectl run 命令创建并允许容器镜像
- kubectl run 命令:
- 创建并运行一个或多个容器镜像
- 创建一个deployment 或 job 来管理容器
- run 命令会在后续版本废弃。可以使用create命令代替
- kubectl run --help 查看命令帮助
#启动nginx实例,暴露容器端口80(暴露在pod上),设置副本数3
kubectl run -n kube-public nginx --image=nginx:1.14 --port=80 --replicas=8#使用-w 选项动态跟踪
kubectl get pods -n kube-public -wkubectl get all -n kube-public
2.2 使用kubectl expose命令发布资源
使用kubectl expose命令,将资源暴露为新的service:
使用 kubectl expose --help 获取帮助
kubenetes之所以需要service
- 一方面因为pod的ip不是固定的(pod可能会重建)
- 另一方面则是因为一组pod实例之间总会有负载均衡的需求
- 对于容器而言,kubeletes提供了基于VIP的网桥方式访问service ,再由service 重定向到相应的pod
service的类型:
- ClusterIP:
- 提供一个集群内部的虚拟ip,以供pod访问(service的默认类型)
- NodePort:
- 在每个Node上打开一个端口以供外部访问,kubernetes将会在每个node上打开一个端口,并在每个node的端口都是一样的,
- 通过NodeIP:NodePort的方式,kubenetes集群外部的程序可以访问service
- LoadBalancer:
- 通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用
- 通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用
2.2.1 发布
#为deployment的nginx创建service,并通过service的80端口转发至容器的80端口上,service的名称为nginx-service,类型为NodePort
kubectl expose deployment -n kube-public nginx --port=80 --target-port=80 --name=ngin-service --type=NodePort#--port 指定node在service上的端口
#--target 指定 容器在pod 上的端口
#--type 指定类型。默认是cluster ip
2.2.2 查看pod网络信息和service暴露端口
#查看pod网络信息和service暴露端口
kubectl get pods,svc -o wide -n kube-public
2.2.3 查看service关联的资源
#通过查看service资源的详细信息里的endpoints信息查看关联的后端节点
kubectl describe service -n kube-public ngin-service #直接查看endpoints关联的后端节点
kubectl get endpoints -n kube-public
2.2.4 在所有的node节点上查看负载均衡端口
yum -y install ipvsadm
ipvsadm -Ln
#在所有node节点都可以看到ClusterIP:80的转发(内部访问)
#以及可以看到对应node节点ip:30754(nodeip使用的端口)的转发(外部访问)
2.3 使用kubectl set 命令更新资源信息
kubectl set :
- 跟新现有资源的一些信息
- kubectl set --help 获取帮助信息
2.3.1 获取当前nginx的版本号
curl -I http://192.168.23.12:30754
curl -I http://192.168.23.13:30754
2.3.2 将版本跟新为1.15
#查看所有资源信息,找到deployment的资源名
kubectl get all -n kube-public#查看相应deployment资源里的容器名
kubectl describe deployment.apps/nginx -n kube-public#使用kubectl set image ,将nginx版本升级为1.15.
#nginx=nginx:1.15 表示容器nginx使用镜像nginx:1.15
kubectl set -n kube-public image deployment.apps/nginx nginx=nginx:1.15#动态跟踪
kubectl get pod -n kube-public -w#如果升级失败,可能时因为网络问题。可以先在node 节点上,将对应的镜像拉去下来
curl -I http://192.168.23.12:30754
curl -I http://192.168.23.13:30754
2.4 使用kubectl rollout 对资源进行回滚
kubectl rollout
- 对资源进行回滚
- kubectl rollout --help 查看帮助文档
#查看历史版本
kubectl rollout history -n kube-public deployment nginx
#执行回滚到上一个版本
kubectl rollout undo -n kube-public deployment nginx#检查回滚状态kubectl rollout status -n kube-public deployment nginx
curl -I http://192.168.23.12:30754
curl -I http://192.168.23.13:30754
2.5 使用kubectl delete删除资源
#删除副本控制器
kubectl delete -n kube-public deployments.apps nginx#删除service
kubectl delete -n kube-public service/ngin-service
三: 金丝雀发布(Canary Release)
3.1 什么是金丝雀发布
金丝雀发布,又称灰度发布
Deployment控制器支持自定义控制更新过程中的滚动节奏,如"暂停(pause) "或“继续(resume)"更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。
然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
3.2 配置deployment使用金丝雀发布
3.2.1 发布nginx服务
#使用nginx1.14版本镜像创建3个pod
kubectl run -n kube-public nginx --image=nginx:1.14 --port=80 --replicas=3#发布服务
kubectl expose deployment -n kube-public nginx --port=80 --target-port=80 --name=ngin-service --type=NodePort#获取服务的pod和service 信息
kubectl get pod,svc -n kube-public#f范围cluster ip 或者nodeip:nodeport 3次,查看nginx的版本都是1.14.2
curl -I 10.1.216.211
3.2.1 更新deployment版本,并配置暂停deploymen
#另开一个master 终端,观察
kubectl get pods -n kube-public -w#在第一个master终端将nginx升级到1.15.1 ,并配置藏听
kubectl set image -n kube-public deployment.apps/nginx nginx=nginx:1.15 && \
kubectl rollout -n kube-public pause deployment/nginx#切换到第二个master终端查看#查看运行的pod(此时有四个pod在运行)
kubectl get pods -n kube-public
3.2.2 访问测试,查看版本号
#访问cluster ip 4 次。查看nginx的版本号
curl -I 10.1.216.211
3.2.3 在确保更新的pod没有问题后,继续更新
#让deployment 继续更新
kubectl rollout -n kube-public resume deployment nginx#使用clusterip 访问,查看nginx的版本号
curl -I 10.1.216.211
3.2.4 查看最后的更新情况
#查看pod 数量。发现回到了3个
kubectl get pods -n kube-public #访问3 次以上,查看版本号
curl -I 10.1.216.211
kubectl 命令管理(1)相关推荐
- Kubernetes二进制集群部署+Web管理界面+kubectl 命令管理+YAML文件详解(集合)
Kubernetes---- 二进制集群部署(ETCD集群+Flannel网络) Kubernetes----单节点部署 Kubernetes----双master节点二进制部署 Kubernetes ...
- kubectl命令管理kubernetes对象的三种方式
kubenetes的抽象概念,如Pod.Service.Volume.Namespace.ReplicaSet.Deployment.StatefulSet.DaemonSet.Job等统称对象,ku ...
- 《三》kubectl命令行管理工具、YAML配置详解
kubectl命令行管理工具 kubectl自动补全功能设置 执行: 1.yum install -y bash-completion 2.source <(kubectl completion ...
- kubectl常用命令_《蹲坑学kubernetes》之十五:kubectl命令详解
kubectl用于运行Kubernetes集群命令的管理工具.本章节主要讲了kubectl基本语法和使用方法.在以后的实际工作中,使用越来越多,也会越来越熟悉. 1.kubectl语法 kubectl ...
- kubectl命令自动补全功能
我们在管理k8s集群的时候,避免不了使用kubectl命令工具,但是该命令还是挺复杂的,使用中也记不住那么多的api选项,故这里介绍一下kubectl命令补全工具的安装. 1:安装bash-compl ...
- kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令
kubectl是Kubernetes的一个命令行管理工具,可用于Kubernetes上的应用部署和日常管理.本文列举了9个常见的kubectl命令,并对每个命令进行了简单扼要的介绍,供大家参考.同时, ...
- 容器编排技术 -- Kubernetes kubectl 命令表
容器编排技术 -- Kubernetes kubectl 命令表 kubectl命令列表 kubectl run(创建容器镜像) kubectl expose(将资源暴露为新的 Service) ku ...
- kubectl命令大全
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 kubectl 安装 参考https://blog.csdn.net/luanpeng825485697/article/details/808625 ...
- Kubernetes中pod分类、核心组件、网络模型及kubectl命令使用
文章目录 Kubernetes中pod分类.核心组件.网络模型及kubectl命令使用 1.k8s中pod分类 2.核心组件 3.网络模型 4.kubectl常用命令使用 Kubernetes中pod ...
最新文章
- 反射应用--取得类的结构
- 以太网单播、组播、广播
- 杀毒软件引起的WinCE编译出错问题
- NTU生活:NTU景点
- CS1704问题汇总
- 使用FreeRTOS进行性能和运行时分析
- 将八进制数制转换为二进制,十进制和十六进制数制
- android webview_在 Flutter 中使用 WebView
- 线上python课程一般多少钱-Python在线培训课程费用是多少?值不值得报名?
- 简单理解php的socket编程
- jsp mysql连接池 回收_mysql连接池连接JSP
- 牛市来了,我劝读者不要炒股他却骂我不地道...
- 内网代理——常用工具
- vcf文件的index
- 魔方机器人之搭建Python编程环境
- 【知识】SpringBoot项目结构目录
- js 校验是否合法的中国身份证
- 斑马条码打印机常见故障大盘点
- 微信域名防红防屏蔽防封系统,轻松微信推广域名被屏蔽问题
- LATEX 幻灯片入门
热门文章
- android 观察者,Android开发实现简单的观察者与被观察者示例
- java io密集型任务_Java线程池讲解——针对IO密集型任务
- android点击屏幕特效,Android自定义控件(特效一) 点击屏幕,根据所点击的位置绘制圆环...
- MapReduce概述
- 如何利用反射来绕过泛型
- 最真实的办公自动化案例!
- 怎么求导来着?别费劲了,试试这个Python的通用求导法
- 亲手完成4大企业实战项目,挑战Python全栈高薪岗位!
- 判断用户是否存在再进行新增_MySQL用户行为分析
- h5 video 手机上无法显示_怎样把手机上的导航显示在汽车屏幕上