ConfigMapの使い方
Kubernetesを使う時、アプリの設定とかをコンテナイメージに埋め込むのではなく実行時に設定したい場合、ConfigMapを使う。
ConfigMapはkey-valueで情報を保持しているんだけど、これがなかなか便利で、ファイルから作る*1とkey: ファイル名
、value: ファイルの内容
みたいに勝手にやってくれる*2。ディレクトリから作る*3と、そのディレクトリに含まれるファイルを全部読み込んで、それぞれkey-valueとして保持してくれたりもする。
説明するより例の方が分かり易いので実際のコマンドで説明。
ConfigMapの定義
$ ls redis-config $ cat redis-config maxmemory 2mb maxmemory-policy allkeys-lru
であった時に、このファイルからConfigMapを作成してみると
$ kubectl create configmap <名前> --from-file=redis-config configmap "<名前>" created $ kubectl get configmap <名前> apiVersion: v1 data: redis-config: |- maxmemory 2mb maxmemory-policy allkeys-lru kind: ConfigMap metadata: creationTimestamp: xxxxxxx name: <名前> namespace: default resourceVersion: "6872" selfLink: /api/v1/namespaces/default/configmaps/<名前> uid: 67b1ce21-125c-11e8-9a96-d4c7541dd274
のようになる。dataのところを見ると、ファイル名がキーになって、対応する内容がファイルの中身になっていることが確認できる。
ConfigMapの利用
ConfigMapに保存してある情報をPodで使う時は、ConfigMapの内容をファイルとして書き込んだvolumeを定義し、それをPodがmountして使う。
例
$ cat redis-pod.yaml apiVersion: v1 kind: Pod metadata: name: redis spec: containers: - name: redis image: kubernetes/redis:v1 env: - name: MASTER value: "true" ports: - containerPort: 6379 volumeMounts: - mountPath: /redis-master-data name: data - mountPath: /redis-master name: config volumes: - name: data emptyDir: {} - name: config configMap: name: example-redis-config items: - key: redis-config path: redis.conf
上記のように、volumeを定義するときに、ConfigMapを選び、keyでデータを、pathでボリューム内に作成するファイルを指定する。ここでは、redis.confというファイル(中身はConfigMap内のredis-configで指定したデータ)があるボリュームが作成される。Podではそれを/redis-master
ディレクトリにマウントしていることから、Pod内ではConfigMapの内容は/redis-master/redis.conf
として参照可能となる。
$ kubectl apply -f redis-pod.yaml pod "redis" created $ kubectl exec -it redis /bin/bash root@redis:/data# ls /redis-master redis.conf root@redis:/data# cat /redis-master/redis.conf maxmemory 2mb maxmemory-policy allkeys-lru
[参考]
FedoraにRictyフォントをインストール
基本的に本家に書いてある手順に従って実行していけばよいのだけど、補足メモを書いておく。
1. Rictyフォント生成スクリプトをダウンロード
こちらからricty_generator.sh
をダウンロード
$ mkdir Ricty $ cd Ricty $ wget http://www.rs.tus.ac.jp/yyusa/ricty/ricty_generator.sh
2. fontforgeをインストール
# dnf install -y fontforge
3. Inconsolataフォントをダウンロード
Google Fontsからダウンロード。
- 右上の
SELECT THIS FONT
をクリック - 下にダブみたいのができるからクリック
- 開いたウインドウ?の右上にダウンロードアイコンがあるのでダウンロード
- ダウンロードしたzipファイルを先程作成したRictyディレクトリに解凍しておく
4. Migu 1Mフォントをダウンロード
こちらからダウンロード可能
5. Rictyフォントの生成
$ cd Ricty $ ./ricty_generator.sh auto
6. 作成されたフォントを/usr/share/fonts
以下にコピー
# mkdir -p /usr/share/fonts/Ricty # cp Ricty/Ricty* /usr/share/fonts/Ricty/
7. ターミナルのprofileやgnome-tweak-toolで利用するフォントを選択
pyenv/pyenv-virtualenv環境を構築する
必要なパッケージのインストール
pyenvはpythonをダウンロードしてきてコンパイルするけど、その際に必要となるパッケージを入れておく。Fedora以外はこちらを参照。
- Fedora 27
dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel xz
pyenvとpyenv-virtualenvのインストール
pyenv開発者がpyenv installerを公開しているのでそれを利用してインストールする。このインストーラがpyenv-virtualenvまで入れてくれるからラクチン。
$ curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash .... <snip> ... WARNING: seems you still have not added 'pyenv' to the load path. # Load pyenv automatically by adding # the following to ~/.bash_profile: export PATH="/home/hoge/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
ということなので、.bashrc
に下記を追加しておく。
export PATH="/home/hoge/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
pythonのバージョンをインストールしてみる
インストール可能なバージョンを確認
$ pyenv install --list ... 3.6.4 ...
特定バージョンのpythonをインストールする
$ python install 3.6.4 $ pyenv versions * system (set by /home/hoge/.pyenv/version) 3.6.4
新しい環境を作成してみる
システムのpythonのバージョンの確認
$ python --version Python 2.7.14
/home/hoge/hoge以下に3.6.4環境を作成してみる
$ cd /home/hoge/hoge $ pyenv virtulenv 3.6.4 my_3.6.4 $ pyenv local my_3.6.4 $ python --version Python 3.6.4 $ cd .. $ python --version Python 2.7.14
ということで、/home/hoge/hoge
以下だけ3.6.4を使う環境をつくれた
起動失敗してgrubプロンプト(grub >)が出た場合の対処
調べるのが面倒なので、メモを残しておく。
1. パーティションの確認 (sda2から起動したい)
grub> ls (hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)
2. パーティションの中身の確認
grub> ls (hd0,msdos2)/ bin/ boot/ dev/ .... grub> cat (hd0,msdos2)/etc/redhat-releases Fedora release 27 (Twenty Seven) grub> ls (hd0,msdos)/boot/ .... initramfs-4.14-11-300.fc27.x86_64.img .... vmlinuz-4.14.11-300.fc27.x86_64 ...
3. 起動
grub> set root=(hd0,msdos2) grub> linux /boot/vmlinux-4.14.11-300.fc27.x86_64 root=/dev/sda2 grub> initrd /boot/initramfs-4.14.11-300.fc27.x86_64.img grub> boot
4 (必要に応じて) grubの再インストール
# grub2-install /dev/sda
5 (必要に応じて) ファイルシステムの復旧
今回はxfsが壊れていたので下記コマンドを実行。
# xfs_repair /dev/sda2
参考
https://jp.linux.com/news/linuxcom-exclusive/418274-lco20140625 26.7. GRUB 2 の再インストール Red Hat Enterprise Linux 7 | Red Hat Customer Portal
psコマンドでプロセスの親子関係を表示する
今までps aux
使ってたけど、f
付けるだけで分かり易くなるの知らなかった。
$ ps auxf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ... hoge 1981 0.0 0.1 534500 53764 tty2 S+ 23:19 0:00 \_ /opt/google/chrome/chrome --type=zygote hoge 1982 0.0 0.0 148140 13112 tty2 S+ 23:19 0:00 | \_ /opt/google/chrome/nacl_helper hoge 1985 0.0 0.0 534500 12308 tty2 S+ 23:19 0:00 | \_ /opt/google/chrome/chrome --type=zygote hoge 2163 0.0 0.2 991548 83072 tty2 Sl+ 23:19 0:00 | \_ /opt/google/chrome/chrome --type=renderer --field-trial-handle=1715498460 ...
インスタンスにパスワードでログインする
Fedora等のイメージはデフォルトではパスワードログインが無効になってて、パスワードでログインすることができません。 しかし、CloudInit使って設定を変えることでパスワードログインできるようになります。
以下をユーザデータとして渡せばOK。 Horizonでインスタンスを作る際、Post-Creation -> Customization Script Source -> Direct Inputとして下記を入力。
#cloud-config password: <password> chpasswd: { expire: False } ssh_pwauth: True