1クール続けるブログ

とりあえず1クール続けるエンジニアの備忘録

GKEのマスターノードVerが1.9.7に上がったので変更点まとめる

8月20日からGKEのマスターノードのVersionが1.8.10から1.9.7に上がりました。
ノードの自動アップグレードonにしている方は既に、クラスター全てのノードのVersionが上がってることかと思います。 ただ、バージョン上がると急に期待している動作と違う挙動が見られることもまだあると思うので、本番運用しているシステムでの自動アップグレードは怖いですよね。なので、マスターノードがバージョンアップしたタイミングで、手作業で移行していくというところが多いのではと思います。

ということで、ver.1.9.xになることでどのような変化があるのか調べてみました。 主なワークロードはGAになったこともあり、デフォルト値が変わっていないかやapiVersionの変更の有無などが気になるところです。

以下を参考にいたしました。 気になったことがあれば順次拾っていきます。

www.mirantis.com

github.com

kubernetes.io

Workloads API

kindがDaemonSet, Deployment, ReplicaSet, StatefulSetのapiVersionがapps / v1beta2からapps / v1へと変更になります。今後、apps / v1への開発は行われるが、その前のバージョンには行われないようなのでこの機会に変更しておきたいところです。手動で更新する場合は、kubectl convertを使用して、グループバージョン間でマニフェストを変換できるとのことです。試していないですが、以下のコマンドで変換して適応までできそう。
kubectl get deployment webapp1 -o yaml && kubectl convert -f - | kubectl apply -f -

API Machinery

Admission Control

Admission webhooksがbetaになった。Admission Controller(API Serverのリクエスト制御の機能)のひとつ。apiServer起動時にPluginを指定しなくてはいけなかったが、https通信でそれらのPluginを動的に有効にできるようになるというもの。GKEだとAdmission Controllerを意識することが無い(現在どんな設定になっているかもわからない)。この機能を使うには、Admission ControllerでenableにしなくてはいけないのでGKEでは出来ないかも?しれません。
参考:Kubernetes: Admission Controlとは何か

Custum Resource

Custom Resource Definition (CRD)というのがbetaになった。ユーザ独自のリソースのこと。CRDのリソースを管理するCRD Controller(podから見たDeploymentみたいなもの)のサンプルができたので、それを参考に独自リソースとそのコントローラを作成してみるのもありかもしれません。

GitHub - kubernetes/sample-controller: Repository for sample controller. Complements sample-apiserver

KubernetesのCRD(Custom Resource Definition)とカスタムコントローラーの作成

Kubernetes勉強会第6回 〜Kubernetesの実行と管理、CustomResourceDefinitions(CRD)、Container Runtime Interface(CRI)〜 - 世界中の羊をかき集めて

Auth

RBAC

組み込み(デフォルト)のadmin/edit/viewロールが定義されていて、これをcluster role aggregationで使うことができる。以下のような形。以下に出てくるcronTabはカスタムリソースのため組み込みのRoleでは制御されていない。ClusterRoleなので、namespace関係なし。Roleであれば、namespaceで分割する。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: aggregate-cron-tabs-edit
  labels:
    # Add these permissions to the "admin" and "edit" default roles.
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
rules:
- apiGroups: ["stable.example.com"]
  resources: ["crontabs"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

CLI

kubectl

  • kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar -c <specific-container>でremoteのファイルをlocalにcopyできる
  • kubectl create pdbでデフォルト値をセットしなくなったらしい

Network

IPv6

IPv6対応(alpha)したとのこと。ただ、alphaの機能を使用するためには、 GKEの場合にはクラスター作成時に指定をすることが必要なので、面倒かもしれない。

CoreDNS

CoreDNSがリリース。kube-dnsの代わりに使用することもできる(1.11でデフォルトがCoreDNSだったような)

Other

  • –cleanup-ipvsフラグができてkube-dns起動時に既存のルールをフラッシュするか決められるように
  • ホストの/etc/resolve.confまたは-resolv-confに "options"を追加することでpodのresolve.confに反映させることが出来るようになった

Strorage

  • PersistentVolumePersistentVolumeClaimのサイズは0より大きくなくてはいけない。
  • GCEマルチクラスタでは、ノードを持たないゾーンでPersistentVolumeオブジェクトが動的にプロビジョニングされなくなります。

まとめ

適当にまとめてしまったので調査しつつブラッシュアップする