初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）マニュフェスト(ConfigMap)編

# 背景
個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。

その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。

# 引用や参考と今回の自分の勉強用の書籍の紹介
[技術評論社『Kubernetes実践入門』のサンプルコード](https://github.com/kubernetes-practical-guide/examples)
[Kubernetes実践入門 プロダクションレディなコンテナ＆アプリケーションの作り方](https://gihyo.jp/book/2019/978-4-297-10438-2)
![](http://image.gihyo.co.jp/assets/images/cover/2019/9784297104382.jpg)


## 実際の学びについて

書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
***この章の勉強は本当に書籍の写経が主になるかもしれません・・・***


# 勉強開始

- ### マニュフェスト作成するまで
  - https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.4.2.1/manifests/mattermost


- ### マニフェスト作成結果になるまで
  - https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.4.2.2

### ConfigMap に保存下キーと値を Pod テンプレートの env から呼び出す

```
$ kubectl create cm common-env -o yaml --dry-run \
--from-literal MYSQL_USER=myuser \
--from-literal MYSQL_PASSWORD=mypassword \
--from-literal MYSQL_DATABASE=mattermost > cm.yaml

$ cat cm.yaml
apiVersion: v1
data:
  MYSQL_DATABASE: mattermost
  MYSQL_PASSWORD: mypassword
  MYSQL_USER: myuser
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: common-env
```

```yaml:mattermost-deploy.yamlでConfigMapの値を参照させる
      containers:
      - image: k8spracticalguide/mattermost:4.10.2
        name: mattermost
        env:
        - name: MM_USERNAME
          valueFrom:
            configMapKeyRef:
              name: common-env
              key: MYSQL_USER
        - name: MM_PASSWORD
          valueFrom:
            configMapKeyRef:
              name: common-env
              key: MYSQL_PASSWORD
        - name: DB_NAME
          valueFrom:
            configMapKeyRef:
              name: common-env
              key: MYSQL_DATABASE
```
- `MM_USERNAME / MM_PASSWORD / DB_NAME` を ConfigMap を参照するように修正した

```yaml:db-deploy.yamlのConfigMapの値を参照させる
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: rootpassword
        envFrom:
        - configMapRef:
          name: common-env
```

- `MYSQQL_ROOT_PASSWORD` 以外を CoinfigMap を参照するように修正した


```terminal:mattermost-deployの環境変数を確認
    Environment:
      MM_USERNAME:  <set to the key 'MYSQL_USER' of config map 'common-env'>      Optional: false
      MM_PASSWORD:  <set to the key 'MYSQL_PASSWORD' of config map 'common-env'>  Optional: false
      DB_NAME:      <set to the key 'MYSQL_DATABASE' of config map 'common-env'>  Optional: false
      DB_HOST:
```

```terminal:db-deployの環境変数を確認
    Environment Variables from:
      common-env  ConfigMap  Optional: false
    Environment:
      MYSQL_ROOT_PASSWORD:  rootpassword
```

### Pod 内で data の中身をファイルとして読み込む

```terminal:config.jsonの内容が多いので中身割愛してコマンドのみとします
$ curl -L -O https://raw.githubusercontent.com/kubernetes-practical-guide/examples/master/ch3.4.2.2/config.json

$ kubectl create cm mm-config-file -o yaml --dry-run --from-file config.json > cm-file.yaml
```

```yaml:mattermost-deploy.yamlのConfigMapはファイルとして読み込むように設定
        volumeMounts:
        - name: cm-volume
          mountPath: /mm/config #マウントするボリューム名を指定
      volumes:
      - name: cm-volume
        configMap:
          name: mm-config-file
          items:
          - key: config.json
            path: config.json
```

- config.json ファイルが Volume に保存されているのを確認 

```
$ kubectl exec -it mattermost-846bf547c-zfwld -- ls /mm/config/
config.json
```

## 次は 次は 3.4.2 章をやっていきます。

- Secret を使って今回設定した設定値を管理する方法を学びます


# 最後に

ちょっと、現在までの章を振り返ってやっと 1/3 ぐらいかなというところですが、これからもっと面白くなっていく部分だと思い、ConfigMap をもう少し次回までに腹落ちさせていきたいと思います。

# 今までの投稿

1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Pod編](https://qiita.com/nodokaodayaka/items/04d8bc3c9c40443c1cd3)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）NameSpace 編](https://qiita.com/nodokaodayaka/items/73bc1c939a665aaa4b7b)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Label 編](https://qiita.com/nodokaodayaka/items/fd5284475fb1ba920559)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）ReplicaSet 編](https://qiita.com/nodokaodayaka/items/fc9f749f123649a2dbd9)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Deployment 編](https://qiita.com/nodokaodayaka/items/2c9d4eefec40d4896126)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Service 編](https://qiita.com/nodokaodayaka/items/28955bd813eaf512baf5)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）ConfigMap 編](https://qiita.com/nodokaodayaka/items/09c7627eaa913da78cf8)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Secret 編](https://qiita.com/nodokaodayaka/items/8bc1a5963a7c7c177010)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）操作編](https://qiita.com/nodokaodayaka/items/09cb848164e4a1855c83)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編](https://qiita.com/nodokaodayaka/items/ae95e04b064b7600f6af)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート２](https://qiita.com/nodokaodayaka/items/fa87fd7a3733957e7aca)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート3（Label操作）](https://qiita.com/nodokaodayaka/items/8f1892eb1627d0717180)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート3（OwnerReference 操作）](https://qiita.com/nodokaodayaka/items/b4ad326be41626da9b2e)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）マニュフェスト編](https://qiita.com/nodokaodayaka/items/8d212a5f1eeb2685f51c)