一、kubectl管理集群中deployment资源与service服务

  1、相关参数  

    kubectl edit 编辑服务器侧资源
    kubectl replace 替换,使用 yaml 配置文件来替换正在运行中的配置参数
    kubectl patch 部分更新资源相关信息
    kubectl apply 使用文件或者标准输入更改配置信息
    kubectl scale 重新设定 Deployment/ReplicaSet/RC/Job 的 size
    kubectl autoscale Deployment/ReplicaSet/RC 的自动扩展设定
    kubectl cordon 设定 node 不可使用
    kubectl uncordon 设定 node 可以使用
    kubectl drain 设定 node 迚入维护模式

  2、导入镜像

    之前已经导入nginx镜像,直接操作,没有镜像可以自行在阿里云下载

二、编辑创建nginx-deployment.yaml /nginx-svc.yaml

  1、创建deployment.yaml

    vim nginx-deployment.yaml

[root@master ~]# vim nginx-deployment.yaml 

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: nginx
spec:
replicas:
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: docker.io/nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort:
protocol: TCP

  2、创建servcie

    vim nginx-svc.yaml

[root@master ~]# vim nginx-svc.yaml 

kind: Service
apiVersion: v1
metadata:
name: nginx
labels:
name: nginx
spec:
type: NodePort
ports:
- protocol: TCP
nodePort:
targetPort:
port:
selector:
name: nginx

  3、几个端口说明

      nodePort:31008   #---后期用户可以通过node节点上这个端口访问nginx,公网接口

      targetPort:80   #---指定nginx docker容器的端口

      port:80  #---pod端口

  4、create deployment/service

    1)创建

    kubectl create -f nginx-deployment.yaml

    kubectl create -f nginx-svc.yaml

    2)查看deployment/service/pod详细信息

    kubectl get deploy

    kubectl get svc

    kubectl get pod -o wide

[root@master ~]# kubectl create -f nginx-deployment.yaml
deployment "nginx" created
[root@master ~]# kubectl create -f nginx-svc.yaml
service "nginx" created
[root@master ~]# kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
mysql 1h
nginx 26s
[root@master ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> /TCP 5d
nginx 10.254.8.125 <nodes> 80:31008/TCP 24s
[root@master ~]#
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--2f905 / Running 1h 10.255.36.2 node2
nginx-1011335894-9wd5h 1/1 Running 0 2m 10.255.41.2 node1
[root@master ~]#

    3)访问

      上面已经知道pod运行在哪台节点及对外监听端口,接下来就是访问(上面标红字段)

      http://192.168.216.53:31008/

    4)通过其他节点访问nginx

      虽然nginx是在node1上运行,但是通过其他节点也是可以访问,因为已经做负载均衡

三、kubectl edit命令

  主要作用是修改service值

  1、使用get -o参数指定输出消息为yaml类型

    kubectl get service nginx -o yaml

[root@master ~]# kubectl get service nginx -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: --03T20::43Z
labels:
name: nginx
name: nginx
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/services/nginx
uid: e7775727-fe7a-11e9-bc69-000c291c8b39
spec:
clusterIP: 10.254.8.125
ports:
- nodePort:
port:
protocol: TCP
targetPort:
selector:
name: nginx
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}

  2、修改对外端口为31009

    kubectl edit service nginx

      和vim类似的操作

[root@master ~]# kubectl edit service nginx

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
creationTimestamp: --03T20::43Z
labels:
name: nginx
name: nginx
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/services/nginx
uid: e7775727-fe7a-11e9-bc69-000c291c8b39
spec:
clusterIP: 10.254.8.125
ports:
- nodePort: 31009
port:
protocol: TCP
targetPort:
selector:
name: nginx
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}

  3、查看service,并验证

    kubectl get service 

[root@master ~]# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> /TCP 5d
nginx 10.254.8.125 <nodes> :/TCP 20m

    访问web端

      http://192.168.216.54:31009/

四、kubectl replace

 replace 替换的意思

  1、查看服务

    kubectl get service

  2、重定向一个nginx_replace的yaml文件

    kubectl get service nginx -o yaml >nginx_replace.yaml

  3、编辑,修改端口为31010

    vim nginx_replace.yaml

  4、执行替换

    kubectl replace -f nginx_replace.yaml

  5、检查service是否生效 

    kubectl get service

[root@master ~]# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> /TCP 5d
nginx 10.254.8.125 <nodes> :/TCP 20m
[root@master ~]# kubectl get service nginx -o yaml >nginx_replace.yaml
[root@master ~]# vim nginx_replace.yaml apiVersion: v1
kind: Service
metadata:
creationTimestamp: --03T20::43Z
labels:
name: nginx
name: nginx
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/services/nginx
uid: e7775727-fe7a-11e9-bc69-000c291c8b39
spec:
clusterIP: 10.254.8.125
ports:
- nodePort:
port:
protocol: TCP
targetPort:
selector:
name: nginx
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
~
~
[root@master ~]# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> /TCP 6d
nginx 10.254.8.125 <nodes> :/TCP 17h
~

五、kubectl patch

  当修改一部分配置时,使用patch会方便点,如pod换个image镜像

  这里比如更换镜像使得nginx支持php

  1、检查当前镜像是否支持php

    kubectl exec -it nginx-1011335894-853ql bash

    php

  2、上传新镜像,并导入

    这个可以在阿里云随便找一个

  3、执行patch进行替换

   kubectl patch pod nginx-1011335894-673bv -p  '{"spec":{"containers":[{"name":"nginx","image":"docker.io/zxg/nginx-php-fpm56:latest"}]}}'

  4、检查是否支持php

   kubectl exec nginx-1011335894-853ql -it bash

[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--jwrfc / Running 2h 10.255.41.5 node1
nginx--853ql / Running 13s 10.255.36.2 node2
nginx--pzgsj / Running 2h 10.255.41.2 node1
[root@master ~]# kubectl exec -it nginx-1011335894-853ql bash
root@nginx--853ql:/# nginx -v
nginx version: nginx/1.13.
root@nginx--853ql:/# php
bash: php: command not found
root@nginx--853ql:/# exit
exit
[root@master ~]# kubectl patch pod nginx-1011335894-853ql -p '{"spec":{"containers":[{"name":"nginx","image":"docker.io/zxg/nginx-php-fpm56:latest"}]}}'
"nginx-1011335894-853ql" patched
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql--jwrfc / Running 2h
nginx--853ql / Running 3m
nginx--pzgsj / Running 2h
[root@master ~]# kubectl exec nginx-1011335894-853ql -it bash
bash-4.3# php -v
PHP 5.6. (cli) (built: Dec ::)
Copyright (c) - The PHP Group
Zend Engine v2.6.0, Copyright (c) - Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) -, by Zend Technologies

六、kubectl apply

  是用来使用文件或者标准输入来更改配置信息

  1、编辑svc.yaml文件

    vim nginx-svc.yaml

    改:nodePort:

    为:nodePort:

  2、执行apply命令

    kubectl apply -f nginx-svc.yaml

  3、检查结果

    kubectl get svc

 
[root@master ~]# vim nginx-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: nginx
labels:
name: nginx
spec:
type: NodePort
ports:
- protocol: TCP
nodePort:
targetPort:
port:
selector:
name: nginx
[root@master ~]# kubectl apply -f nginx-svc.yaml
service "nginx" configured
[root@master ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> /TCP 6d
nginx 10.254.8.125 <nodes> :/TCP 23h
[root@master ~]#

七、kubectl scale (规模)

  用于横向扩展、是k8s或swarm这类容器编辑平台的重要功能之一

  如这里把replica副本改为3

  1、查看nginx运行在哪个节点

  kubectl get pod -o wide

  2、执行scale命令

  kubectl scale --current-replicas=1 --replicas=3 deployment/nginx

  3、再次查看nginx运行在哪个节点

  kubectl get pod -o wide

 
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--2f905 / Running 1d 10.255.36.2 node2
nginx--9wd5h / Running 23h 10.255.41.2 node1
[root@master ~]# kubectl scale --current-replicas=1 --replicas=3 deployment/nginx
deployment "nginx" scaled
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--2f905 / Running 1d 10.255.36.2 node2
nginx-1011335894-9wd5h 1/1 Running 0 23h 10.255.41.2 node1
nginx-1011335894-scm64 1/1 Running 0 5s 10.255.36.3 node2
nginx--xtkqd / Running 5s 10.255.41.3 node1
[root@master ~]#

八、kubectl autoscale

  用于自动扩展确认,跟scale不同的是前者还是需要手动执行,而autoscale则会根据负载进行调解,而这条命令可以对Deployment/ReplicaSet/RC进行设定,通过最小值和最大值的指定进行设定

  1、设置最小2,最大5的自动设置

    kubectl autoscale deployment nginx --min=2 --max=5

  2、查看结果

    应该是没变化,因为之前手动scale设置的3在这个2-5的区间

    kubectl get pod -o wide

  3、设置最小2,最大2

    kubectl autoscale deployment nginx --min=2 --max=2

    这里就报错了因为之前设置的是3

[root@master ~]# kubectl autoscale deployment nginx --min=2 --max=5
deployment "nginx" autoscaled
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--2f905 / Running 1d 10.255.36.2 node2
nginx--9wd5h / Running 23h 10.255.41.2 node1
nginx--scm64 / Running 3m 10.255.36.3 node2
nginx--xtkqd / Running 3m 10.255.41.3 node1
[root@master ~]# kubectl autoscale deployment nginx --min= --max=
Error from server (AlreadyExists): horizontalpodautoscalers.autoscaling "nginx" already exists
[root@master ~]#

九、kubectl cordon 与uncordon

  如果其中一台node坏掉或者维护,暂时不能让生成的pod在此node上运行,需要通知kubernetes让其不要创建过来,就用cordon命令,如果uncordon就是取消这个设定

  1、在node2上运行cordon命令

    kubectl cordon node2

  2、查看pod详情,没有变化

    kubectl get pod -o wide

  3、查看node详情

    kubectl get nodes -o wide

    发现node2状态为Ready,SchedulingDisabled

  3、增加relicas副本

    kubectl scale --replicas=6 deployment/nginx

  4、再次查看pod详情

    kubectl get pod -o wide

    发现都是node1建立,node2已经封锁成功

  5、使用uncordon取消cordon设定

    kubectl uncordon node2

[root@master ~]# kubectl cordon node2
node "node2" cordoned
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--2f905 / Running 1d 10.255.36.2 node2
nginx--9wd5h / Running 23h 10.255.41.2 node1
nginx--scm64 / Running 9m 10.255.36.3 node2
nginx--xtkqd / Running 9m 10.255.41.3 node1
[root@master ~]# kubectl get nodes -o wide
NAME STATUS AGE EXTERNAL-IP
node1 Ready 6d <none>
node2 Ready,SchedulingDisabled 5d <none>
[root@master ~]# kubectl scale --replicas=6 deployment/nginx
deployment "nginx" scaled
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--2f905 / Running 1d 10.255.36.2 node2
nginx--7jvp0 / Running 5s 10.255.41.5 node1
nginx--8nd1q / Running 5s 10.255.41.6 node1
nginx--9wd5h / Running 23h 10.255.41.2 node1
nginx--lhtkm / Running 5s 10.255.41.4 node1
nginx--scm64 / Running 11m 10.255.36.3 node2
nginx--xtkqd / Running 11m 10.255.41.3 node1
[root@master ~]#
[root@master ~]# kubectl uncordon node2
node "node2" uncordoned
[root@master ~]# kubectl get node -o wide
NAME STATUS AGE EXTERNAL-IP
node1 Ready 6d <none>
node2 Ready 5d <none>
[root@master ~]#

十、kubectl drain (驱逐)

  用于对某个node结点进行维护

  1、drain两个作用:

    1、设定此node不可以使用(cordon)

    2、evict驱逐pod到他正常的node节点上

  2、先删之前的nginx

    kubectl delete deploy nginx

  3、创建pod

    kubectl create -f nginx-deployment.yaml

  4、查看pod详情

    kubectl get pod -o wide

  5、执行drain命令 drain node2

    kubectl drain node2

  6、查看pod

    get pod -o wide

    镜像已经漂移过来了

  7、查看node

    node2状态为Ready,SchedulingDisabled   ,完成配置

[root@master ~]# kubectl create -f nginx-deployment.yaml
deployment "nginx" created
[root@master ~]# kubectl scale --replicas=4 deployment nginx
deployment "nginx" scaled
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--2f905 / Running 1d 10.255.36.2 node2
nginx--4tpj5 / Running 8s 10.255.41.3 node1
nginx--673bv / Running 8s 10.255.36.3 node2
nginx--hw8ld / Running 8s 10.255.36.4 node2
nginx--pzgsj / Running 28s 10.255.41.2 node1
[root@master ~]# kubectl drain node2
node "node2" cordoned
pod "nginx-1011335894-hw8ld" evicted
pod "nginx-1011335894-673bv" evicted
pod "mysql-1971774246-2f905" evicted
node "node2" drained
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql--jwrfc / Running 7s 10.255.41.5 node1
nginx--4tpj5 / Running 1m 10.255.41.3 node1
nginx--d683g / Running 7s 10.255.41.6 node1
nginx--gs3lg / Running 7s 10.255.41.4 node1
nginx--pzgsj / Running 1m 10.255.41.2 node1
[root@master ~]# get nodes -o wide
  
NAME STATUS AGE EXTERNAL-IP node1 Ready 6d <none> node2 Ready,SchedulingDisabled 5d <none>

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/11807083.html

Kubernetes3-kubectl管理Kubernetes容器平台-2的更多相关文章

  1. Kubernetes3-kubectl管理Kubernetes容器平台-1

    一.简介 1.什么是kubectl kubectl前面其实已经用到了一些,它其实就是用于操作kubernetes集群的命令行接口,通过kubectl的各种命令实现各种功能 2.环境还是用上一偏文章 K ...

  2. Kubernetes 容器平台实战

    一.什么是Kubernetes? Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署,自动扩缩容,维护等功能. 通过Kubernetes可以做到: 快速部署应用 快 ...

  3. 使用kubectl管理Kubernetes(k8s)集群:常用命令,查看负载,命名空间namespace管理

    目录 一.系统环境 二.前言 三.kubectl 3.1 kubectl语法 3.2 kubectl格式化输出 四.kubectl常用命令 五.查看kubernetes集群node节点和pod负载 5 ...

  4. kubectl管理kubernetes集群

    [root@master ~]# kubectl get nodes  查看集群节点NAME      STATUS    AGEnode1     Ready     25mnode2     Re ...

  5. Kubernetes容器集群管理环境 - 完整部署(上篇)

    Kubernetes(通常称为"K8S")是Google开源的容器集群管理系统.其设计目标是在主机集群之间提供一个能够自动化部署.可拓展.应用容器可运营的平台.Kubernetes ...

  6. VMware Tanzu Kubernetes Grid 1.3 发布 - VMware 构建、签名和支持的开源 Kubernetes 容器编排平台的完整分发版

    Tanzu Kubernetes 集群是由 VMware 构建.签名和支持的开源 Kubernetes 容器编排平台的完整分发版.可以通过使用 Tanzu Kubernetes Grid 服务在主管集 ...

  7. kubernetes云平台管理实战: 集群部署(一)

    一.环境规划 1.架构拓扑图 2.主机规划 3.软件版本 [root@k8s-master ~]# cat /etc/redhat-release CentOS Linux release 7.4.1 ...

  8. Kubernetes容器集群管理环境 - Prometheus监控篇

    一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...

  9. Kubernetes容器集群管理环境 - 完整部署(中篇)

    接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...

随机推荐

  1. Python 元组(Tuple)操作详解

    Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号, 列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 一.创建元组 代码如下: tup1 = (' ...

  2. python编程基础之三十三

    构造方法: 目的:构造方法用于初始化对象,可以在构造方法中添加成员属性 触发时机:实例化对象的时候自动调用 参数:第一个参数必须是self,其它参数根据需要自己定义 返回值:不返回值,或者说返回Non ...

  3. redis之spring应用

    前言 读本文之前,需要大家对redis有所了解,大家可以去看一下我之前分享的redis安装及简单使用这一随笔,而本文我将跟大家分享学习一下redis与spring的集成.当然,首先需要打开我们的red ...

  4. 配置mysql可局域网内访问

    一 进入mysql输入密码 :mysql -u root -p二 执行可局域网访问命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ...

  5. Vue-CLI项目快速UI布局-element-ui

    0902自我总结 Vue-CLI项目快速UI布局-element-ui 一.element-ui的地址 https://element.eleme.cn/ 二.element-ui的安装 <!- ...

  6. MySQL时间盲注五种延时方法 (PWNHUB 非预期解)

    转自cdxy师傅:https://www.cdxy.me/?p=789 PWNHUB 一道盲注题过滤了常规的sleep和benchmark函数,引发对时间盲注中延时方法的思考. 延时函数 SLEEP ...

  7. Python之selenium+pytesseract 实现识别验证码自动化登录脚本

    今天写自己的爆破靶场WP时候,遇到有验证码的网站除了使用pkav的工具我们同样可以通过py强大的第三方库来实现识别验证码+后台登录爆破,这里做个笔记~~~ 0x01关于selenium seleniu ...

  8. VBS 去除文件夹下 Excel 的公式

    注意问题 window 环境下运行, 代码 ANSI 编码格式保存. 直接放到需要转换的文件夹下,双击运行. 代码 function getfolder() getfolder=left(wscrip ...

  9. Ubuntu PHP安装bcmath模块

    1.sudo apt-get install php-bcmath ,安装之后: 2.运行:php -i | grep "php.ini",找到php的配置文件: 加入代码: ex ...

  10. Python 爬取豆瓣TOP250实战

    学习爬虫之路,必经的一个小项目就是爬取豆瓣的TOP250了,首先我们进入TOP250的界面看看. 可以看到每部电影都有比较全面的简介.其中包括电影名.导演.评分等. 接下来,我们就爬取这些数据,并将这 ...