Linux学习-Kubernetes之Secret和ConfigMap

Secret

将加密数据存储在etcd,Pod容器可以通过挂载Volume方式或通过变量方式访问

#通过yaml创建Secret
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: bG90dXM=    #以bash64方式加密username
  password: MTIzNDU2    #以bash64方式加密password
[root@k8s-master k8syaml]# kubectl apply -f secret.yaml 

#通过变量形式使用Secret中信息
apiVersion: v1
kind: Pod
metadata:
  name: mypodvarsecret
spec:
  containers:
  - name: nginx
    image: nginx
    env:
    - name: SECRET_USERNAME
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: username
    - name: SECRET_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: password
[root@k8s-master k8syaml]# kubectl exec -it mypodvarsecret bash
root@mypodvarsecret:/# echo $SECRET_USERNAME
lotus
root@mypodvarsecret:/# echo $SECRET_PASSWORD
123456

#以存储卷方式挂载Secret
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
  volumes:
  - name: foo
    secret:
      secretName: mysecret
#进入容器查看变量情况
[root@k8s-master k8syaml]# kubectl exec -it mypod bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@mypod:/# ls /etc/foo    
password  username
root@mypod:/# cat /etc/foo/password
123456
ConfigMap

存储不加密数据到etcd,让Pod以变量或者Volume挂载到容器中,一般用于配置文件

#创建一个redis配置文件
[root@k8s-master k8syaml]# cat redis.properties 
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
#创建configmap
[root@k8s-master k8syaml]# kubectl create configmap redis-config --from-file=redis.properties
configmap/redis-config created
[root@k8s-master k8syaml]# kubectl get configmap
NAME               DATA   AGE
kube-root-ca.crt   1      108d
redis-config       1      7s
#查看详细信息
[root@k8s-master k8syaml]# kubectl describe configmap redis-config
Name:         redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis.properties:
----
redis.host=127.0.0.1
redis.port=6379
redis.password=123456


BinaryData
====

Events:  <none>
#以volume方式挂载
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["/bin/sh","-c","cat /etc/config/redis.properties"]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: redis-config
  restartPolicy: Never
[root@k8s-master k8syaml]# kubectl get pods
NAME                   READY   STATUS      RESTARTS   AGE
mypod                  0/1     Completed   0          24s
[root@k8s-master k8syaml]# kubectl logs mypod
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
#以变量形式挂载
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info
  special.type: hello
[root@k8s-master k8syaml]# kubectl apply -f configmap_var.yaml
configmap/myconfig created
[root@k8s-master k8syaml]# kubectl get configmap
NAME               DATA   AGE
kube-root-ca.crt   1      108d
myconfig           2      13s
redis-config       1      21m

apiVersion: v1
kind: Pod
metadata: 
  name: mypod
spec:
  containers:
  - name : busybox
    image: busybox
    command: ["/bin/sh","-c","echo $(LEVEL)  $(TYPE)"]
    env:
    - name: LEVEL
      valueFrom:
        configMapKeyRef:
          name: myconfig
          key: special.level
    - name: TYPE
      valueFrom:
        configMapKeyRef:
          name: myconfig
          key: special.type
  restartPolicy: Never

[root@k8s-master k8syaml]# kubectl apply -f configmap_pod_var.yaml 
pod/mypod created
[root@k8s-master k8syaml]# kubectl logs mypod
info hello


你看看我这个吧 apiVersion: apps/v1 kind: Deployment metadata: labels: app: grafana name: grafana namespace: monitoring spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: initContainers: - name: init-grafana image: harbor.local/mdw/busybox:latest command: - sh - -c - | mkdir -p /var/lib/grafana/plugins mkdir -p /var/lib/grafana/data mkdir -p /var/lib/grafana/sessions mkdir -p /var/lib/grafana/csv mkdir -p /var/lib/grafana/alerting chown -R 65534:65534 /var/lib/grafana chmod -R 755 /var/lib/grafana echo "Directory structure:" ls -la /var/lib/grafana/ volumeMounts: - name: grafana-storage mountPath: /var/lib/grafana containers: - name: grafana image: harbor.local/mdw/grafana:6.4.3 env: - name: GF_PATHS_DATA value: "/var/lib/grafana" - name: GF_PATHS_LOGS value: "/var/log/grafana" - name: GF_PATHS_PLUGINS value: "/var/lib/grafana/plugins" containers: - image: harbor.local/mdw/grafana:6.4.3 name: grafana ports: - containerPort: 3000 name: http readinessProbe: httpGet: path: /api/health port: http resources: limits: cpu: 200m memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - mountPath: /var/lib/grafana name: grafana-storage readOnly: false - mountPath: /etc/grafana/provisioning/datasources name: grafana-datasources readOnly: false - mountPath: /etc/grafana/provisioning/dashboards name: grafana-dashboards readOnly: false - mountPath: /grafana-dashboard-definitions/0/apiserver name: grafana-dashboard-apiserver readOnly: false - mountPath: /grafana-dashboard-definitions/0/cluster-total name: grafana-dashboard-cluster-total readOnly: false - mountPath: /grafana-dashboard-definitions/0/controller-manager name: grafana-dashboard-controller-manager readOnly: false - mountPath: /grafana-dashboard-definitions/0/k8s-resources-cluster name: grafana-dashboard-k8s-resources-cluster readOnly: false - mountPath: /grafana-dashboard-definitions/0/k8s-resources-namespace name: grafana-dashboard-k8s-resources-namespace readOnly: false - mountPath: /grafana-dashboard-definitions/0/k8s-resources-node name: grafana-dashboard-k8s-resources-node readOnly: false - mountPath: /grafana-dashboard-definitions/0/k8s-resources-pod name: grafana-dashboard-k8s-resources-pod readOnly: false - mountPath: /grafana-dashboard-definitions/0/k8s-resources-workload name: grafana-dashboard-k8s-resources-workload readOnly: false - mountPath: /grafana-dashboard-definitions/0/k8s-resources-workloads-namespace name: grafana-dashboard-k8s-resources-workloads-namespace readOnly: false - mountPath: /grafana-dashboard-definitions/0/kubelet name: grafana-dashboard-kubelet readOnly: false - mountPath: /grafana-dashboard-definitions/0/namespace-by-pod name: grafana-dashboard-namespace-by-pod readOnly: false - mountPath: /grafana-dashboard-definitions/0/namespace-by-workload name: grafana-dashboard-namespace-by-workload readOnly: false - mountPath: /grafana-dashboard-definitions/0/node-cluster-rsrc-use name: grafana-dashboard-node-cluster-rsrc-use readOnly: false - mountPath: /grafana-dashboard-definitions/0/node-rsrc-use name: grafana-dashboard-node-rsrc-use readOnly: false - mountPath: /grafana-dashboard-definitions/0/nodes name: grafana-dashboard-nodes readOnly: false - mountPath: /grafana-dashboard-definitions/0/persistentvolumesusage name: grafana-dashboard-persistentvolumesusage readOnly: false - mountPath: /grafana-dashboard-definitions/0/pod-total name: grafana-dashboard-pod-total readOnly: false - mountPath: /grafana-dashboard-definitions/0/pods name: grafana-dashboard-pods readOnly: false - mountPath: /grafana-dashboard-definitions/0/prometheus-remote-write name: grafana-dashboard-prometheus-remote-write readOnly: false - mountPath: /grafana-dashboard-definitions/0/prometheus name: grafana-dashboard-prometheus readOnly: false - mountPath: /grafana-dashboard-definitions/0/proxy name: grafana-dashboard-proxy readOnly: false - mountPath: /grafana-dashboard-definitions/0/scheduler name: grafana-dashboard-scheduler readOnly: false - mountPath: /grafana-dashboard-definitions/0/statefulset name: grafana-dashboard-statefulset readOnly: false - mountPath: /grafana-dashboard-definitions/0/workload-total name: grafana-dashboard-workload-total readOnly: false securityContext: runAsUser: 65534 runAsGroup: 65534 allowPrivilegeEscalation: false nodeSelector: beta.kubernetes.io/os: linux #nodeName: k8s-node-1 securityContext: runAsNonRoot: true runAsUser: 65534 fsGroup: 65534 serviceAccountName: grafana volumes: #- emptyDir: {} # name: grafana-storage - name: grafana-storage persistentVolumeClaim: claimName: pvc-sc-grafana - name: grafana-datasources secret: secretName: grafana-datasources - configMap: name: grafana-dashboards name: grafana-dashboards - configMap: name: grafana-dashboard-apiserver name: grafana-dashboard-apiserver - configMap: name: grafana-dashboard-cluster-total name: grafana-dashboard-cluster-total - configMap: name: grafana-dashboard-controller-manager name: grafana-dashboard-controller-manager - configMap: name: grafana-dashboard-k8s-resources-cluster name: grafana-dashboard-k8s-resources-cluster - configMap: name: grafana-dashboard-k8s-resources-namespace name: grafana-dashboard-k8s-resources-namespace - configMap: name: grafana-dashboard-k8s-resources-node name: grafana-dashboard-k8s-resources-node - configMap: name: grafana-dashboard-k8s-resources-pod name: grafana-dashboard-k8s-resources-pod - configMap: name: grafana-dashboard-k8s-resources-workload name: grafana-dashboard-k8s-resources-workload - configMap: name: grafana-dashboard-k8s-resources-workloads-namespace name: grafana-dashboard-k8s-resources-workloads-namespace - configMap: name: grafana-dashboard-kubelet name: grafana-dashboard-kubelet - configMap: name: grafana-dashboard-namespace-by-pod name: grafana-dashboard-namespace-by-pod - configMap: name: grafana-dashboard-namespace-by-workload name: grafana-dashboard-namespace-by-workload - configMap: name: grafana-dashboard-node-cluster-rsrc-use name: grafana-dashboard-node-cluster-rsrc-use - configMap: name: grafana-dashboard-node-rsrc-use name: grafana-dashboard-node-rsrc-use - configMap: name: grafana-dashboard-nodes name: grafana-dashboard-nodes - configMap: name: grafana-dashboard-persistentvolumesusage name: grafana-dashboard-persistentvolumesusage - configMap: name: grafana-dashboard-pod-total name: grafana-dashboard-pod-total - configMap: name: grafana-dashboard-pods name: grafana-dashboard-pods - configMap: name: grafana-dashboard-prometheus-remote-write name: grafana-dashboard-prometheus-remote-write - configMap: name: grafana-dashboard-prometheus name: grafana-dashboard-prometheus - configMap: name: grafana-dashboard-proxy name: grafana-dashboard-proxy - configMap: name: grafana-dashboard-scheduler name: grafana-dashboard-scheduler - configMap: name: grafana-dashboard-statefulset name: grafana-dashboard-statefulset - configMap: name: grafana-dashboard-workload-total name: grafana-dashboard-workload-total
最新发布
09-26
### 配置含义分析 对于给定的 Grafana Deployment 配置文件,其中关键部分如下: ```yaml 19: - image: 192.168.1.100:5000/grafana:6.4.3 ``` 这一行指定了 Grafana 容器所使用的镜像,`192.168.1.100:5000` 是镜像仓库的地址,`grafana:6.4.3` 明确了使用的是 Grafana 6.4.3 版本的镜像。 ### 优化建议 - **资源请求与限制**:在 Deployment 配置中添加资源请求限制,有助于合理分配集群资源,避免 Grafana 容器过度占用资源。示例如下: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: grafana-deployment spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: containers: - name: grafana image: 192.168.1.100:5000/grafana:6.4.3 resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m" ``` - **持久化存储**:为了保证 Grafana 的数据在容器重启或重建时不丢失,需要配置持久化存储。可以使用 PersistentVolumeClaim(PVC)来实现。示例如下: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: grafana-deployment spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: containers: - name: grafana image: 192.168.1.100:5000/grafana:6.4.3 volumeMounts: - name: grafana-data mountPath: /var/lib/grafana volumes: - name: grafana-data persistentVolumeClaim: claimName: grafana-pvc ``` 同时,需要创建一个 PVC: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: grafana-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` - **环境变量配置**:可以通过环境变量来配置 Grafana 的一些参数,如管理员用户名密码。示例如下: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: grafana-deployment spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: containers: - name: grafana image: 192.168.1.100:5000/grafana:6.4.3 env: - name: GF_SECURITY_ADMIN_USER value: "admin" - name: GF_SECURITY_ADMIN_PASSWORD value: "password" ``` ### 错误排查 - **镜像拉取失败**:检查镜像仓库地址是否正确,以及是否有访问权限。可以使用 `kubectl describe pod <pod-name>` 查看详细的错误信息。 - **容器启动失败**:查看容器的日志,使用 `kubectl logs <pod-name>` 命令获取容器的日志,从中查找启动失败的原因。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值