Kubernetes の章の Kubernetes 構成

Kubernetes 構成

ベスト プラクティスを構成します。

  • クラウド ネイティブ アプリケーションの 12 の要素の中で、構成の分離が提案されています。

  • 構成ファイルは、クラスターにプッシュする前にバージョン管理に保存する必要があります。これにより、必要に応じて構成の変更をすばやくロールバックできます。また、クラスターの再作成と回復も容易になります。

  • JSON の代わりに YAML を使用して構成ファイルを記述しますこれらの形式は、ほぼすべてのシナリオで同じ意味で使用できますが、YAML の方が使いやすい傾向があります。

  • 関連するオブジェクトを 1 つのファイルにグループ化することをお勧めします。たとえば、guestbook-all-in-one.yaml

  • 必要な場合を除き、デフォルトを指定しないでください。単純な最小限の構成により、エラーの可能性が減少します。

  • 内観を改善するために、オブジェクトの説明をコメントに入れます。

1.秘密

  • Secret オブジェクト タイプは、パスワード、OAuth トークン、SSH キーなどの機密情報を格納するために使用されます。この情報をシークレットに配置することは、Pod 定義またはコンテナー イメージに配置するよりも安全で柔軟です。

  • シークレットは、パスワード、トークン、キーなどの少量の機密情報を含むオブジェクトです。ユーザーはシークレットを作成でき、システムもいくつかのシークレットを作成します。

1.シークレットの種類

  • セグメントタイプ

2. Podの参照方法

Secret を使用するには、Pod が Secret を参照する必要があります。Pod は次の 3 つの方法のいずれかで Secret を使用できます。

  • 1 つ以上のコンテナーにマウントされたボリューム内のファイルとして。(マウントするボリューム)

  • コンテナーとしての環境変数 (envFrom フィールドで参照)

  • Pod のイメージをプルするときに kubelet によって使用されます (現時点ではシークレットは docker-registry タイプです)

Secret 对象的名称必须是合法的 DNS 子域名 。 在为创建 Secret 编写配置文件时,你可以设置 data 与/或 stringData 字段。 data 和 stringData 字段都是可选的。data 字段中所有键值都必须是 base64 编码的字符串。如果不希望执行这种 base64 字符串的转换操作,你可以选择设置 stringData 字段,其中可以使用任何字符串作为其取值。

3、实验

3.1、创建 Secret

generic 类型

## 命令行

#### 1、使用基本字符串

kubectl create secret generic mysecret \

--from-literal=username=devuser \

--from-literal=password='123456'

## 参照以下yaml

apiVersion: v1

kind: Secret

metadata:

name: mysecret

data:

password: UyFCXCpkJHpEc2I9 ## base64编码了一下

username: ZGV2dXNlcg==

  • 获取 Secret 内容

kubectl get secret mysecret -o jsonpath='{.data}'

3.2、使用 Secret

环境变量引用

apiVersion: v1

kind: Pod

metadata:

name: secret-env-pod

spec:

containers:

- name: mycontainer

image: redis

env:

- name: SECRET_USERNAME

valueFrom:

secretKeyRef:

name: mysecret

key: username

- name: SECRET_PASSWORD

valueFrom:

secretKeyRef:

name: mysecret

key: password

restartPolicy: Never

环境变量引用的方式不会被自动更新

卷挂载

apiVersion: v1

kind: Pod

metadata:

name: mypod

spec:

containers:

- name: mypod

image: redis

volumeMounts:

- name: foo

mountPath: "/etc/foo"

readOnly: true

volumes:

- name: foo

secret:

secretName: mysecret

挂载方式的 secret 在 secret 变化的时候会自动更新(子路径引用除外)

二、ConfigMap

  • ConfigMap 来将你的配置数据和应用程序代码分开。

  • ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时,Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:
  # 类属性键;每一个键都映射到一个简单的值
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"


  # 类文件键
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5    
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true

你可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:

  • 在容器命令和参数内

  • 容器的环境变量

  • 在只读卷里面添加一个文件,让应用来读取

  • 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap

apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env:
        # 定义环境变量
        - name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的
          valueFrom:
            configMapKeyRef:
              name: game-demo           # 这个值来自 ConfigMap
              key: player_initial_lives # 需要取值的键
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:
      - name: config
        mountPath: "/config"
        readOnly: true
  volumes:
    # 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
    - name: config
      configMap:
        # 提供你想要挂载的 ConfigMap 的名字
        name: game-demo
        # 来自 ConfigMap 的一组键,将被创建为文件
        items:
        - key: "game.properties"
          path: "game.properties"
        - key: "user-interface.properties"
          path: "user-interface.properties"

1、使用挂载 ConfigMap

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    configMap:
      name: myconfigmap

ConfigMap 的修改,可以触发挂载文件的自动更新

おすすめ

転載: blog.csdn.net/robinhunan/article/details/129014975