k8s-configMap
生产中,在几乎所有的应用都会涉及到配置文件的变更如说在web的程序中,需要连接数据库,缓存甚至是队列等等。每一种应用都要定义其独立的各种配置,如果我们不能很好的管理这些配置文件,我们的工作就变得无比的繁琐。为此业内的一些大公司专门开发了自己的一套配置管理中心,如360的Qcon,百度的disconf等。kubernetes也提供了自己的一套方案,即ConfigMap。kubernetes通过ConfigMap来实现对容器中应用的配置管理。
1.创建ConfigMap
创建ConfigMap的方式有两种,一种是通过yaml文件来创建,另一种是通过kubectl直接在命令行下创建。 方式(1):命令行方式制定配置文件直接创建 kubectl create configmap nginxconfig --from-file /server/yaml/nginx/nginx.conf #通过命令直接创建 kubectl get configmap nginxconfig -o yaml #查看文件 方式(2):编写标准的yaml文件格式: kubectl create -f xxxxconfigmap.yaml cat nginx-configmap.yaml #-----------------------------创建命名空间---------------------------- apiVersion: v1 kind: Namespace metadata: name: mt-math #创建的命名空间名称为mt-math --- #-----------------------------创建configmap文件----------------------- #创建configmap有多种方式,可以通过命令如: #kubectl create configmap nginxconfig --from-file /server/yaml/nginx/nginx.conf #查看创建的yaml文件内容:kubectl get configmap nginxconfig -o yaml #这里采用标准的yaml文件格式进行创建:更新时采用:kubectl replace -f nginx-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: nginxconfig namespace: mt-math data: nginx.conf: | #########wyl530 user nginx; worker_processes auto; error_log /etc/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server_tokens off; access_log /usr/share/nginx/html/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
2. 创建pod yaml文件
cat deployment.yaml #----------------------------创建pv--------------------------------- apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs-pv01 #创建的pv名称可创建多个. namespace: mt-math #属于的命名空间 labels: pv: pv-nfs-01 #定义pv标签,后续通过pvc绑定特定的pv标签。通常如果不写标签则默认通过访问方式和storage大小进行批量绑定。(重要) spec: capacity: storage: 1Gi #创建的pv-nfs-pv01大小为1G accessModes: - ReadWriteMany nfs: #创建的pv数据来源 path: /NFS/pv01 #数据源目录 server: 192.168.0.14 #数据源ip #--------------------------------创建pvc-------------------------------- --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-data-pvc #创建的pvc名称 namespace: mt-math #属于的命名空间 spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi #请求大小为1G selector: #定义标签选择器,此时k8s会根据标签,storage,访问方式 进行匹配。三者同时满足才会绑定。如果不定义,则系统会根据storage的大小和访问方式进行匹配绑定. matchLabels: pv: pv-nfs-01 #定义请求标签为pv-nfs-pv01的pv且大小为1G #--------------------------------创建pod------------------------------------ --- apiVersion: extensions/v1beta1 #接口版本 kind: Deployment #接口类型 metadata: #基础标签名称信息 name: wyl-nginx #创建的pod名称 namespace: mt-math #创建的pod属于mt-math命名空间 spec: #详细参数设置 replicas: 3 #副本数量 selector: #标签选择器 matchLabels: app: wyl-nginx #正对标签为wyl-nginx的pod进行副本的创建 strategy: rollingUpdate: #由于replicas为3,则整个升级,pod个数在2-4个之间 maxSurge: 1 #滚动升级时会先启动1个pod maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数 template: #模板 metadata: labels: app: wyl-nginx #模板pod名称必填 spec: #定义容器模板信息,该模板可以包含多个容器 containers: - name: nginx image: nginx:latest imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 volumeMounts: - name: nginx-nfs mountPath: /usr/share/nginx/html - name: nginx-pvc mountPath: /var/log/nginx subPath: nginx.conf - name: nginx-etc #挂载数据节点名称 mountPath: /etc/nginx/nginx.conf #挂载此目录 subPath: nginx.conf volumes: #设置挂载 - name: nginx-nfs #挂载的数据节点名称 nfs: #挂载的服务类型 server: 192.168.0.14 #服务Ip path: /NFS/wwwroot #挂载数据目录 - name: nginx-pvc #挂载数据节点名称 persistentVolumeClaim: #服务类型 claimName: nfs-data-pvc #数据源名称 - name: nginx-etc #挂载数据节点名称 configMap: name: nginxconfig #指定创建configMap的名称 items: - key: nginx.conf #key为文件名称 path: nginx.conf #文件路径内容 --- #-----------------------创建server------------------------------------------- kind: Service apiVersion: v1 metadata: name: wyl-nginx namespace: mt-math #属于的命名空间 spec: selector: app: wyl-nginx #针对标签为wyl-nginx的标签进行负载 type: NodePort #正对Node节点进行端口暴露 ports: - protocol: TCP #使用端口的协议 port: 3017 #供内网访问暴露的端口 targetPort: 80 #目标pod的端口 nodePort: 33333 #node节点暴露的端口 #简单说明------------------------------------------------------------------- #1.创建了mt-math命名空间,删除命名空间默认删除该命名空间下的所有资源服务 #2.创建了pv,pv不属于任何命名空间 #3.创建了pvc,pvc属于mt-math命名空间 #4.创建了pod属于mt-math命名空间 #5.创建了server属于mt-math命名空间 #6.建议将pv单独写到一个文件中.否则在我们删除改命名空间下的所有服务后,利用该文件再次创建时会报pv已经创建. #---------------------------------------------------------------------------
3.创建资源服务
kubectl create -f /server/yaml/nginx/nginx-configmap.yaml kubectl create -f /server/yaml/nginx/deployment.yaml kubectl exec -it wyl-nginx-d6f68d775-l4rkb --namespace=mt-math -- cat /etc/nginx/nginx.conf |head -1
所有评论(0)