kubernetes deployment部署机制详解
Deployment 使用
Kubernetes提供了一种更加简单的更新RC和Pod的机制,叫做Deployment。通过在Deployment中描述你所期望的集群状态,Deployment Controller会将现在的集群状态在一个可控的速度下逐步更新成你所期望的集群状态。Deployment主要职责同样是为了保证pod的数量和健康,90%的功能与Replication Controller完全一样,可以看做新一代的Replication Controller。但是,它又具备了Replication Controller之外的新特性:Replication Controller全部功能:Deployment继承了上面描述的Replication Controller全部功能。
事件和状态查看:可以查看Deployment的升级详细进度和状态。回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。暂停和启动:对于每一次升级,都能够随时暂停和启动。多种升级方案:Recreate----删除所有已存在的pod,重新创建新的; RollingUpdate----滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。
1234
ConfigMap 配置
在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等。 一些大公司专门开发了自己的一套配置管理中心,kubernetes也提供了自己的一套方案,即ConfigMap。kubernetes通过ConfigMap来实现对容器中应用的配置管理。
apiVersion: v1
kind: ConfigMap
metadata:
name: special
-config
namespace: cango
-prd
data:
special.how: very
special.type: charm
apiVersion: v1
kind: ConfigMap
metadata:
name: example
-volume
-config
namespace: cango
-prd
data:
backup-script: | xxxx自定义文件内容
log-script: | xxxx自定义文件内容
1234567891011121314151617
StorageClass
Kubernetes 集群存储 PV 支持 Static 静态配置以及 Dynamic 动态配置,动态卷配置 (Dynamic provisioning) 可以根据需要动态的创建存储卷。
静态配置方式,集群管理员必须手动调用云/存储服务提供商的接口来配置新的固定大小的 Image 存储卷,然后创建 PV 对象以在 Kubernetes 中请求分配使用它们。 #通过动态卷配置,能自动化完成以上两步骤,它无须集群管理员预先配置存储资源,而是使用 StorageClass 对象指定的供应商来动态配置存储资源。 Example: 定义Ceph作为PV存储池进行分配,每个云或存储厂商品牌配置参数都不一样,但是调用方式都是一致的
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rbd
provisioner: kubernetes.io/rbd
parameters:
monitors: 10.142.21.21
:6789,10.142.21.22
:6789,10.142.21.23
:6789
adminId: admin
adminSecretName: ceph
-secret
-admin
adminSecretNamespace: kube
-system
pool: rbd
userId: admin
userSecretName: ceph
-secret
-admin
fsType: ext4
imageFormat: "1"
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: rbd
-pvc1
namespace: kube
-system
spec:
storageClassName: rbd
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Deployment部署文件详解
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: cango
-demo
namespace: cango
-prd
labels:
app: cango
-demo
spec:
replicas: 3
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: cango
-demo
sepc:
containers:
- name: cango
-demo
image: swr.cn
-east
-2.myhuaweicloud.com/cango
-prd/cango
-demo
:0.0.1
-SNAPSHOT
command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]
args:
- '-storage.local.retention=$(STORAGE_RETENTION)'
- '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'
- '-config.file=/etc/prometheus/prometheus.yml'
- '-alertmanager.url=http://alertmanager:9093/alertmanager'
- '-web.external-url=$(EXTERNAL_URL)'
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe:
readinessProbe:
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
resources:
requests:
cpu: 2
memory: 2048Mi
limits:
cpu: 2
memory: 2048Mi
env:
- name: LOCAL_KEY
value: value
- name: CONFIG_MAP_KEY
valueFrom:
configMapKeyRef:
name: special
-config
key: special.type
ports:
- name: http
containerPort: 8080
volumeMounts:
- name: log
-cache
mount: /tmp/log
- name: sdb
mountPath: /data/media
- name: nfs
-client
-root
mountPath: /mnt/nfs
- name: example
-volume
-config
mountPath: /etc/config
- name: rbd
-pvc
volumes:
- name: log
-cache
emptyDir: {}
- name: sdb
hostPath:
path: /any/path/it/will/be/replaced
- name: example
-volume
-config
configMap:
name: example
-volume
-config
items:
- key: log
-script
path: path/to/log
-script
- key: backup
-script
path: path/to/backup
-script
- name: nfs
-client
-root
nfs:
server: 10.42.0.55
path: /opt/public
- name: rbd
-pvc
persistentVolumeClaim:
claimName: rbd
-pvc1
kubernetes单个pod运行两个容器yaml文件实践
apiVersion: v1
kind: Replicationtroller
metadate:
name: baolei
-rc
spec:
replicas: 1
selector:
app: baolei
template:
metadata:
labels:
app: baolei
annotations:
"pod.beta.kubernetes.io/hostaname": baolei
-server
spec:
containers:
- name: tomcat
image: tomcat
:7.0.75
-jre8
-alpine
ports:
- containerPort: 8080
- volumeMounts:
- mountPath: /etc/localtime
name: time
- name: mysql
image: mysql
:5.6
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: root
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql
- mountPath: /etc/localtime
name: time
volumes:
- name: time
hostPath:
path: /etc/localtime
- name: mysql
iscsi:
targetPortal: 8.8.8.8
:3260
iqn: iqn.2011
-11
:dss.baoleimysql
lun: 0
fsType: ext4
readOnly: false