Release Notesにリンクされているものをみると、さらっと一文ですまされているところが実はいろいろ更新されていたのでまとめてみました。なお、すべて修正内容のコメントとソースを見ただけでまだ試してはないです。あと断定形で書いてますが、あやしいところがあればコメントもらえると助かります。
kubernetes 1.7
全体のリリースノートはこちら。
kubernetes/CHANGELOG-1.7.md at master · kubernetes/kubernetes · GitHub
Azure Managed Diskを永続化ディスクとして使用可能にする
いままではUnmanaged Diskしか使えなかったのをManaged Diskも利用可能になりました。コード的には大規模な変更になっています。 github.com
どうも説明を読んでいると、これ以前のバージョンではAzure Diskを利用するpodがnodeを移動するときに問題があったり、パフォーマンス的にいけてないとか書いてあったりします。これについては、AKS,OpenShift 3.7の両方でテスト済みです。AKSの記事はこちらをどうぞ。
OpenShiftはアカウント登録が必要ですが、こちらにあります。
Azure Fileをglobal Azure(通常のpublic Azureクラウド)以外のAzure環境(Azure GermanyやChinaなど)でも利用可能にする
通常のglobal Azure region以外に、Azure GermanyなどもkubernetesやOpenShiftはサポートしています。azure configurationファイルにCLOUDというキーがあり、そこでAZUREGERMANCLOUDなどと指定することでAPIのエンドポイントの変更に対応できます。
のですが、Azure Fileだけエンドポイントがハードコードされていたのでその修正が入りました。
kubernetesが存在するresource group以外のVNetも許容する
いままではVNetはkubernetesが配置されているresource groupと同じresource groupに存在するのが前提でしたが、vnetResourceGroupというキーでAzure Configuration ファイルに指定すると、VNetが別のresource groupに存在してもいいようになりました。なお、VNetはAzure Load Balancerを作成するときに利用されるようです。
Azure Load Balancerのhealthprobeで名前とポートの両方をチェックするようにした
Azure Load Balancerリソースを使う際に、nodeportsの変更に追随するようにしました。
1.8
全体のリリースノートはこちら。
kubernetes/CHANGELOG-1.8.md at master · kubernetes/kubernetes · GitHub
Azure File/Diskをマウントする際のパーミッションを0755にする。
いままで0700だったのを0755に変更しました。
Standard_GRS, Standard_RAGRS をAzure Storageのオプションとしてサポート
Azure Diskを永続化ディスクとして利用する際のオプションとして、Standard_LRSとPremium_LRS に加えて Standard_GRSとStandard_RAGRSがサポートされるようになりました。指定する場所はstorageclassのstorageaccounttypeになります。
Azure Fileを永続化ディスクとして使う場合にマウントオプションをサポートする
Azure Fileを永続化ディスクとしてマウントする場合、LinuxのCIFSモジュールを使ってマウントするのですが、その際のマウントオプションをstorageclassの中で指定できるようになりました。これ使うとパスワードとか渡せるので、Linux側がSMB 3.0の暗号化プロトコルに対応していれば*1、Regionの異なるAzure Fileにもマウントできるのではと思います。
Azure DiskとFileをWindowsノードにもマウント可能にする
Azure DiskとAzure FileをWindowsノードにもマウントできるよう、マウントパスにドライブレターが指定でき、Linux全体の制約がいくつか消えました。
インスタンスメタデータサービスのサポート
インスタンスメタデータサービスからノードに関する情報を取得するようになりました。ノードのホスト名とプライベートIPとVMサイズなどの取得にまず使っているようです。useInstanceMetadataをAzure configurationファイルで有効にしておく必要があります。コードを見るかぎり、VM名とノード名が一致しないといけない制約はまだありそうです。
API実行時のリトライフローの改善
仮想マシンの状態を取得するときなどにAPIを実行しますが、エラーが起きた際のリトライフローの改善が行われました。
Azure Fileの共有名を自動生成する際に妥当な名前を生成するようにした
Azure Fileの共有を自動生成する際に、Azure側の制約に沿った妥当な名前を生成するようにしました。
デバイス名の変更によるkubelet再起動時に発生する問題の対処
デバイス名が変更されると、kubelet再起動時に起動しなくなる問題があったため、マウントパスのチェックと再マウント処理を追加しました。マウント先を/dev/sd*から/dev/disk/by-idに変え変更されないようにしています。
Azure FIleを利用したPVCの作成に失敗したときのエラーメッセージの改善
ストレージキーの不一致や、共有の作成失敗などの際もすべてfailed to find a matching storage accountと表示されていたのを変更しました。
ストレージアカウント初期化処理の改善
不要な初期化処理をなくし、on-demandで初期化するようにしました。
既存のノードが属するAvailability Setに存在しないノードを追加する際にクラッシュしないようにした
AKSでノードを手動追加する際に発生していたバグのようですが、原理としては、最初に構築したノードは1つのAvailabilitySetに属していて、そのAvailabilitySetに属さないノードを後から追加する際に、クラッシュしていたので、それを防止するコードを追加しています。
VolumeSource.ReadOnlyがnilの際にクラッシュしないようにした
nilの場合はデフォルト値としてfalseを設定するようにしました。
Azure Fileに接続する際に利用するsecretを別のnamespaceのものを参照できるようにした。
secretNamespaceを指定することで、別のnamespaceのsecretを利用できるようにしました。
kubectlの認証にAzure Active Directoryのプラグインが利用できるようにした
1.9
全体のリリースノートはこちら。
kubernetes/CHANGELOG-1.9.md at master · kubernetes/kubernetes · GitHub
[1.7から1.9へ変更]サービスプリンシパルをMSIから取得できるようにする
いままではAzure Configuration ファイルにAPIを実行するためのサービスプリンシパルのIDとかパスワードを指定していたのですが、それらをManaged Service Identity経由で受け取れるようになりました。
(2018/02/02 17:10 追記) 1.7で使える!と思って試したら動かなくて、じつはバグがあって1.9で修正されています。 github.com
ServiceをAzure DNS経由でpublic IPに解決するためのアノテーションを導入した
service.alpha.kubernetes.io/label-name: myserviceというアノテーションをkubernetesのサービスに設定すると、myservice.<azure-region>.cloudapp.azure.comというAzure DNSのレコード経由でpublic IPに解決してくれるようになります。
Azure FileをWindowsノードにマウントする際、上限を越えたらエラーを出すようにした
Windowsの場合、ネットワークドライブとしてマウントするので、ドライブレターの上限を超えたらマウントできなくなります。その際のエラメッセージを出すようになりました。
*1:RHELについては7.5 beta1で使用可能になっているので、このままいけば7.5で対応予定