资源创建详解

一:Pod及常用参数

1.简介

2.模板

3.删除pod

示例流程如下:

  1. 用户发送删除pod的命令,默认宽限期是30秒;
  2. 在Pod超过该宽限期后API server就会更新Pod的状态为“dead”;
  3. 在客户端命令行上显示的Pod状态为“terminating”;
  4. 跟第三步同时,当kubelet发现pod被标记为“terminating”状态时,开始停止pod进程:
  5. 如果在pod中定义了preStop hook,在停止pod前会被调用。如果在宽限期过后,preStop hook依然在运行,第二步会再增加2秒的宽限期;
  6. 向Pod中的进程发送TERM信号;
  7. 跟第三步同时,该Pod将从该service的端点列表中删除,不再是replication controller的一部分。关闭的慢的pod将继续处理load balancer转发的流量;
  8. 过了宽限期后,将向Pod中依然运行的进程发送SIGKILL信号而杀掉进程。
  9. Kublete会在API server中完成Pod的的删除,通过将优雅周期设置为0(立即删除)。Pod在API中消失,并且在客户端也不可见。

3.1.默认删除

默认删除,会按照上线的流程,等待宽限期30s

kubectl delete POD --namespace=xxx

3.2.强制删除

设置宽限期为0,会立即删除,没有宽限期

kubectl delete POD --namespace=xxx --force --grace-period=0

4.设置Pod主机名

template.spec.hostname:pod_name 设置pod的主机名

5.镜像拉取策略(ImagePullPolicy)

ImagePullPolicy:

  • Always: 不管镜像是否存在,都会拉取
  • Never:不管镜像是否存在,都不会拉取
  • IfNotPresent:只有当镜像不存在的时候才会进行拉取

注意:

  • 默认为IfNotPresent,但:latest标签的镜像默认为Always
  • 拉取镜像时docker会进行校验,如果镜像中的MD5码没有变,则不会拉取镜像数据。
  • 生产环境中应该尽量避免使用:latest标签,而开发环境中可以借助:latest标签自动拉取最新的镜像。

二:RC

1.简介

2.模板

官网资料

apiVersion: v1
kind: ReplicationController # 定义资源类型
metadata:
name: zabbix-db
namespace: zabbix
spec:
replicas: 1
selector:
app: zabbix-db
template:
metadata:
name: zabbix-db
labels:
app: zabbix-db
spec:
terminationGracePeriodSeconds: 30 # 容器平滑退出时间,默认30s
hostname: zabbix-db # 设置容器的主机名
containers:
- name: zabbix-db
image: mysql:5.7.22
env:
- name: MYSQL_DATABASE
value: zabbix
- name: MYSQL_USER
value: zabbix
- name: MYSQL_PASSWORD
value: zabbix
- name: MYSQL_ROOT_PASSWORD
value: Abc123@
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
readOnly: false
name: zabbix-database
volumes:
- name: zabbix-database
nfs:
server: 172.30.80.222
path: "/data/zabbix/zabbix_db/mysql"

三:Deployment

1.简介

​ Deployment为Pod和Replica Set(升级版的 Replication Controller)提供声明式更新。比于RC,Deployment直接使用kubectl edit deployment/deploymentName 或者kubectl set方法就可以直接升级(原理是Pod的template发生变化,例如更新label、更新镜像版本等操作会触发Deployment的滚动升级)。

2.模板

官方资料

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
minReadySeconds: 30 # 滚动升级时,容器准备就绪时间最少为30s
replicas: 5
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate: # 当type为RollingUpdate时,才会进行设置
maxSurge: 25% # 当定义为25%时,容器会先新建百分之25的pod,然后开始滚动升级
maxUnavailable: 25% # 每次升级的百分比,也可以是绝对数(5),默认值25%
type: RollingUpdate # 滚动升级方式,有Recreate:立马关闭所有pod进行升级,RollingUpdate:采用百分比的方式滚动升级
template: # 模板
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
resources: # 资源限制
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
env: # 设置变量
- name: DB_SERVER_HOST
value: zabbix-db-server
- name: MYSQL_DATABASE
value: zabbix
- name: MYSQL_USER
value: zabbix
- name: MYSQL_PASSWORD
value: zabbix
- name: MYSQL_ROOT_PASSWORD
value: Abc123@
- name: ZBX_HISTORYSTORAGEURL
value: http://192.168.2.171:9200
- name: ZBX_HISTORYSTORAGETYPES
value: uint,dbl,str,log,text
ports:
- containerPort: 80
livenessProbe: #livenessProbe是K8S认为该pod是存活的,不存在则需要kill掉,然后再新启动一个,以达到RS指定的个数。
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe: #readinessProbe是K8S认为该pod是启动成功的,这里根据每个应用的特性,自己去判断,可以执行command,也可以进行httpGet。
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 5
successThreshold: 1
restartPolicy: Always # 启动失败时,会重试启动 ---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
sessionAffinity: ClientIP
selector:
app: nginx
ports:
# 将容器的80端口映射到master主机的8888端口
- port: 80 # pod端口
nodePort: 8888 # 宿主机上的端口

四:HPA

1.简介

​ Horizontal Pod Autoscaler根据观察到的CPU利用率自动调整复制控制器,部署或副本集中的容器数量(或者,通过 自定义指标 支持,根据其他一些应用程序提供的指标)。请注意,Horizontal Pod Autoscaling不适用于无法缩放的对象,例如DaemonSet。

2.模板

创建一个pod,必须添加资源请求和限制参数

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
minReadySeconds: 30
replicas: 5
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
resources:
requests: # 在使用HPA自动扩展时,必须使用资源请求和资源限制
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
restartPolicy: Always ---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
sessionAffinity: ClientIP
selector:
app: nginx
ports:
# 将容器的80端口映射到master主机的8888端口
- port: 80
nodePort: 8888

创建HPA

V2 HPA创建规则

官方资料

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler # 指定对象类型
metadata:
name: nginx-hpa # 名字
labels: # 标签
app: hpa
version: v0.0.1
spec:
scaleTargetRef:
apiVersion: v1
kind: Deployment
name: nginx # 创建Deployment时,指定的名字
minReplicas: 1 # 最小pod
maxReplicas: 10 # 最大pod
targetCPUUtilizationPercentage: 70 # CPU用到70%,自动扩展一个pod

查看

# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx-hpa Deployment/nginx 0% / 70% 1 10 1 4d

查看详情

# kubectl describe hpa/nginx-hpa
Name: nginx-hpa
Namespace: default
Labels: app=hpa
version=v0.0.1
Annotations: <none>
CreationTimestamp: Thu, 02 Aug 2018 16:39:55 +0800
Reference: Deployment/nginx
Metrics: ( current / target )
resource cpu on pods (as a percentage of request): 0% (0) / 70%
Min replicas: 1
Max replicas: 10
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale
ScalingActive True ValidMetricFound the HPA was able to succesfully calculate a replica count from cpu resource utilization (percentage of request)
ScalingLimited True TooFewReplicas the desired replica count was less than the minimum replica count
Events: <none>

五:StatefulSet

1.简介

2.模板

2.1.基础环境介绍

StatefulSet Name Service Name
apiVersion: v1
kind: Service
metadata:
name: zoo01
labels:
app: zoo01
spec:
ports:
- port: 2888
name: leader-listen
- port: 3888
name: leader-vote
clusterIP: None
selector:
app: zoo01 ---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: zoo01
labels:
app: zoo01
spec:
serviceName: "zoo01-service"
replicas: 1
template:
metadata:
creationTimestamp: null
labels:
app: zoo01
spec:
terminationGracePeriodSeconds: 30
hostname: zoo01
containers:
- name: zoo01
image: zookeeper:3.5
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
env:
- name: ZOO_MY_ID
value: "1"
- name: ZOO_SERVERS
value: "server.1=zoo01:2888:3888 server.2=zoo02:2888:3888 server.3=zoo03:2888:3888"
ports:
- containerPort: 2181
- containerPort: 2888
- containerPort: 3888
restartPolicy: Always

六:PV和PVC

PV

apiVersion: v1
kind: PersistentVolume
metadata:
name: gitlab-pv
namespace: dev
spec:
capacity:
storage: 10Gi # 大小
accessModes:
- ReadWriteOnce # 读写模式
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
mountOptions: # 挂载选项
- hard
- nfsvers=4.1
nfs: # nfs服务器地址
path: /data/gitlab
server: 172.30.80.222

PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: gitlab-pvc
namespace: dev
labels:
type: nfs
spec:
accessModes:
- ReadWriteOnce # PV和PVC的绑定关系,主要依靠读写模式和存储大小
storageClassName: slow
resources:
requests:
storage: 10Gi
selector:
matchLabels:
name: gitlab-pv

Pod


八:扩展

8.1.Pod调度到指定的Node

介绍:

​ Pod.spec.nodeSelector通过kubernetes的label-selector机制选择节点,由调度器调度策略匹配label,而后调度Pod到目标节点,该匹配规则属于强制约束。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: zabbix-server
namespace: zabbix
spec:
replicas: 1
selector:
matchLabels:
app: zabbix-server
template:
metadata:
name: zabbix-server
labels:
app: zabbix-server
spec:
nodeSelector: # 基于node的lable进行调度
kubernetes.io/hostname: 172.30.80.220 # 指定主机的lable标签
containers:
- name: zabbix-server
image: zabbix/zabbix-server-mysql:latest
env:
- name: DB_SERVER_HOST
value: zabbix-db-server
- name: MYSQL_DATABASE
value: zabbix
- name: MYSQL_USER
value: zabbix
- name: MYSQL_PASSWORD
value: zabbix
- name: MYSQL_ROOT_PASSWORD
value: Abc123@
- name: ZBX_HISTORYSTORAGEURL
value: http://192.168.2.171:9200
- name: ZBX_HISTORYSTORAGETYPES
value: uint,dbl,str,log,text
ports:
- containerPort: 10051

kubernetes 控制器详解【持续完善中】的更多相关文章

  1. PHP编译参数configure配置详解(持续更新中)

    编译参数-使用 ./configure -h在源代码目录中,该命令可以查看所有编译参数以及对应的英文解释 编译参数-说明 --prefix=/opt/php //指定 php 安装目录--with-a ...

  2. 2018年最新Java面试题及答案整理(持续完善中…)

    2018年最新Java面试题及答案整理(持续完善中…) 基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内 ...

  3. SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解

    SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解 博客分类: 跟开涛学SpringMVC   6.6.2.@RequestParam绑定单个请求参数值 @RequestParam用于 ...

  4. 详解 Go 语言中的 time.Duration 类型

    swardsman详解 Go 语言中的 time.Duration 类型swardsman · 2018-03-17 23:10:54 · 5448 次点击 · 预计阅读时间 5 分钟 · 31分钟之 ...

  5. 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别

    详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别 http://blog.sina.com.cn/s/blog_686999de0100jgda.html   实例: ...

  6. 详解jquery插件中(function ( $, window, document, undefined )的作用。

    1.(function(window,undefined){})(window); Q:(function(window,undefined){})(window);中为什么要将window和unde ...

  7. linux 命令学习(持续完善中...)

    linux 命令学习(持续完善中...) 主要是记录一些开发过程中用到的linux命令,慢慢补充 一.用户 1.添加用户: useradd 用户名 2.设置密码:passwd 用户名 ,然后按照提示输 ...

  8. zz详解深度学习中的Normalization,BN/LN/WN

    详解深度学习中的Normalization,BN/LN/WN 讲得是相当之透彻清晰了 深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Ba ...

  9. [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    [转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...

随机推荐

  1. session与cookie,django中间件

    0819自我总结 一.session与cookie 1.django设置session request.session['name'] = username request.session['age' ...

  2. Halcon一日一练:读取文件目录图像的三种方法

    第一种方法: 读了一个单一图像: read_image(Image,'fabrik') 这种方式可以快速的读取软件自身携带的库图像文件,系统设定了库图像映像文件的快速读取方式,我们也可以通过绝对地址的 ...

  3. CentOS6.5下搭建文件共享服务(Samba)

    Samba服务: 本内容为samba服务学习者提供参考 案例描述: 某公司的管理员需要搭建SAMBA服务器,IP地址及允许的访问网段自定义.SAMBA服务器的安全级别为user级,所在工作组为WORK ...

  4. static self 区别与总结

    <?php /** * static self 区别与总结 * 总结: * 1.在 PHP 里,在没有继承时候,你用self::class 和 static::class是一样的,都是获取当前类 ...

  5. Django框架简介与使用注意事项

    一.Django框架简介 MVC框架和MTV框架 MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model). ...

  6. NOMP矿池搭建

    本文将以dash(x11)和Raven(x16rv2)为例子来说明多算法矿池的搭建过程. 1 环境准备 1.1 准备Ubuntu 准备虚拟机或物理机,操作系统为Ubuntu 16.04 1.2 安装必 ...

  7. QLable 显示图片

    1,各种对就是不显示,因为路径中有其它符号如\n\r什么的 QStringList FileOpeartion::PathCombine (const QString strPath, QString ...

  8. The usage of Markdown---代码块

    目录 1. 序言 2. 代码块 3. 引用中的代码 4. 列表中的代码块 更新时间:2019.09.14 1. 序言   在写技术博客的时候,我们常常需要添加一下代码块用来做演示说明,实际上在这篇博客 ...

  9. 基于SEER的区块链版赛亚麻将游戏Pre alpha版本内测啦!

    游戏基于SEER测试网络文体平台模块(Culture and Sports Platform,CSP),正在进行数据调试等工作,大家可以尝鲜体验. 此游戏账户和资金等核心系统完全基于区块链,但目前运行 ...

  10. 设计模式(二十)Flyweight模式

    当使用new关键字生成类的实例时,需要给其分配足够的内存空间.当程序中需要大量对象时,如果都是用new关键字来分配内存,将会消耗大量内存空间.Flyweight模式就是尽量避免new出实例,而是通过尽 ...