文章目录

  • 一: 陈述式资源管理方法
    • 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 查看最后的更新情况

一: 陈述式资源管理方法

陈述式源管理方法:

  1. kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口
  2. kubect1是官方的CTL 命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径
  3. kubect1的命令大全
    1. kubectl --help
    2. 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还需要额外的费用

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)相关推荐

  1. Kubernetes二进制集群部署+Web管理界面+kubectl 命令管理+YAML文件详解(集合)

    Kubernetes---- 二进制集群部署(ETCD集群+Flannel网络) Kubernetes----单节点部署 Kubernetes----双master节点二进制部署 Kubernetes ...

  2. kubectl命令管理kubernetes对象的三种方式

    kubenetes的抽象概念,如Pod.Service.Volume.Namespace.ReplicaSet.Deployment.StatefulSet.DaemonSet.Job等统称对象,ku ...

  3. 《三》kubectl命令行管理工具、YAML配置详解

    kubectl命令行管理工具 kubectl自动补全功能设置 执行: 1.yum install -y bash-completion 2.source <(kubectl completion ...

  4. kubectl常用命令_《蹲坑学kubernetes》之十五:kubectl命令详解

    kubectl用于运行Kubernetes集群命令的管理工具.本章节主要讲了kubectl基本语法和使用方法.在以后的实际工作中,使用越来越多,也会越来越熟悉. 1.kubectl语法 kubectl ...

  5. kubectl命令自动补全功能

    我们在管理k8s集群的时候,避免不了使用kubectl命令工具,但是该命令还是挺复杂的,使用中也记不住那么多的api选项,故这里介绍一下kubectl命令补全工具的安装. 1:安装bash-compl ...

  6. kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令

    kubectl是Kubernetes的一个命令行管理工具,可用于Kubernetes上的应用部署和日常管理.本文列举了9个常见的kubectl命令,并对每个命令进行了简单扼要的介绍,供大家参考.同时, ...

  7. 容器编排技术 -- Kubernetes kubectl 命令表

    容器编排技术 -- Kubernetes kubectl 命令表 kubectl命令列表 kubectl run(创建容器镜像) kubectl expose(将资源暴露为新的 Service) ku ...

  8. kubectl命令大全

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 kubectl 安装 参考https://blog.csdn.net/luanpeng825485697/article/details/808625 ...

  9. Kubernetes中pod分类、核心组件、网络模型及kubectl命令使用

    文章目录 Kubernetes中pod分类.核心组件.网络模型及kubectl命令使用 1.k8s中pod分类 2.核心组件 3.网络模型 4.kubectl常用命令使用 Kubernetes中pod ...

最新文章

  1. 反射应用--取得类的结构
  2. 以太网单播、组播、广播
  3. 杀毒软件引起的WinCE编译出错问题
  4. NTU生活:NTU景点
  5. CS1704问题汇总
  6. 使用FreeRTOS进行性能和运行时分析
  7. 将八进制数制转换为二进制,十进制和十六进制数制
  8. android webview_在 Flutter 中使用 WebView
  9. 线上python课程一般多少钱-Python在线培训课程费用是多少?值不值得报名?
  10. 简单理解php的socket编程
  11. jsp mysql连接池 回收_mysql连接池连接JSP
  12. 牛市来了,我劝读者不要炒股他却骂我不地道...
  13. 内网代理——常用工具
  14. vcf文件的index
  15. 魔方机器人之搭建Python编程环境
  16. 【知识】SpringBoot项目结构目录
  17. js 校验是否合法的中国身份证
  18. 斑马条码打印机常见故障大盘点
  19. 微信域名防红防屏蔽防封系统,轻松微信推广域名被屏蔽问题
  20. LATEX 幻灯片入门

热门文章

  1. android 观察者,Android开发实现简单的观察者与被观察者示例
  2. java io密集型任务_Java线程池讲解——针对IO密集型任务
  3. android点击屏幕特效,Android自定义控件(特效一) 点击屏幕,根据所点击的位置绘制圆环...
  4. MapReduce概述
  5. 如何利用反射来绕过泛型
  6. 最真实的办公自动化案例!
  7. 怎么求导来着?别费劲了,试试这个Python的通用求导法
  8. 亲手完成4大企业实战项目,挑战Python全栈高薪岗位!
  9. 判断用户是否存在再进行新增_MySQL用户行为分析
  10. h5 video 手机上无法显示_怎样把手机上的导航显示在汽车屏幕上