この記事は、Microsoft Azure Tech Advent Calendar 2019 13 日目です。
こんにちは、@task_woof です。普段、AKS 等の IaaS 製品で技術サポートをしています。
毎回華やかな (?) アップデートが多い AKS ですが、今回は地味目なテーマでお送りしますー
はじめに
Azure Kubernetes Servcie (以降、AKS) は、マスター機能 (kube-apisever, kube-schedular, etcd) を Azure 側がマネージドサービスとして提供し、エージェント機能 をご利用者と Azure で責任を持ち合うような形を取っています。
今回は、AKS ノードに関して比較的よくいただくお問い合わせについて紹介いたします。
- AKS ノードの停止 (割り当て解除) が可能か
- 仮想マシンのサイズを変更したい
- 脆弱性対応は必要か
- 時刻同期はどのように行われているか
- AKS ノードに特定のパッケージをインストールしたい
1.AKS ノードの停止 (割り当て解除) が可能か
はい、開発目的等により利用金額を抑えたい場合、仮想マシンを停止 (割り当て解除) いただくことが可能です。
ただ、停止 (割り当て解除) された場合でも、ストレージの利用料金が掛かることにご注意ください 1
2.仮想マシンのサイズを変更したい
AKS ノードは、通常の仮想マシン/仮想マシンスケールセットと同様に、変更/削除操作がユーザから可能です。
そのため、ワークロードの増大によりサイズ変更されたいというのは、
良くある話ですが、残念ながらこちらは操作自体は可能なもののサポートされておりません。 2
その替わりに、既存 AKS クラスタに変更されたいサイズのノードプールを追加いただくことで、
対応することが可能です。
あとは、Pod がその AKS ノードに配備されるように、マニフェストにて
nodeSelector
を追加いただくことで、追加された AKS ノードに Pod を配備するように設定可能です。 3
3.脆弱性対応は必要か
AKS ノードに対する OS, Kubernetes, コンテナランタイムの脆弱性については、セキュリティパッチが配布されます。
Linux ノード (Ubuntu) の場合、Ubuntu の機能 (/lib/systemd/system/apt-daily-upgrade.timer) により、自動適用され、AKS ノードを再起動いただくことにより適用されます。 4
それに対して、Windows ノードの方では、ノードプールをアップグレードいただくことにより、最新の修正が当てられたノードに替わります。
4.時刻同期はどのように行われているか
Linux (Ubuntu 18.04) の場合は、"ntp.ubuntu.com" を 5、Windows の場合は、"time.windows.com" をそれぞれ参照しています。6
また、Pod (コンテナ) は AKS ノードの時刻を参照する挙動となっております。
5.AKS ノードに特定のパッケージをインストールしたい
基本的には、AKS ノードに対する変更は、サポートされません。 7
(AKS ノードにログインしてインストール/設定された変更内容は、スケールアウト/インやアップグレード時に保持されません)
どうしても AKS ノードに対する変更/設定が必要なる場合には、DaemonSet をご利用ください。
DaemonSet リソースは必ず AKS ノード 1 台に 1 つ作成されるリソースになります。
この性質を利用して、ソフトウェアのインストール 8 や セキュリティソフトの実行 9 が行うことができます。
Windows ノードが混在する場合には、nodeSelector
で beta.kubernetes.io/os
により、OS の種別を指定してください。
$ cat << EOF | kubectl apply -f -
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: installpkg
namespace: kube-system
spec:
template:
metadata:
labels:
name: installpkg
spec:
hostPID: true
hostNetwork: true
containers:
- name: installpkg
image: busybox
command:
- nsenter
- --mount=/proc/1/ns/mnt
- --
- sh
- -c
- apt-get update -y && apt-get install -y monit
securityContext:
privileged: true
EOF
最後に、現在 Azure では Kubernetes をご利用いただくにあたり、Azure Container Service (ACS) という選択肢もありますが、こちらは、2020 年 1 月 31 日に廃止予定です。 10
ということでますます AKS を利用される機会が増えること思いますので、引き続きご支援できればと思います