Kubernetes 1.4の変更点
由于Kubernetes 1.4发布了,所以我简单地查看了一下变更点。我主要参考了以下信息。
-
- Kubernetes 1.4: Making it easy to run on Kubernetes anywhere
- Kubernetes Feature tracking board (1.4 release)
ScheduledJobs (alpha)
ScheduledJobsというcronに相当するスケジュールベースのジョブの仕組みが追加されました。
据手册所述,需要使用下面这样的YAML配置来设置作业。
apiVersion: batch/v2alpha1
kind: ScheduledJob
metadata:
name: hello
spec:
schedule: 0/1 * * * ?
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
除了cron的功能外,还可以使用.spec.concurrencyPolicy指定并行执行的控制策略。
Allow: (デフォルト) 並行実行を許可する
Forbid: 並行実行を禁止する。前回のものが終了していなければスキップする
Replace: 現在実行しているジョブを止めて新しいジョブで置き換える
容器镜像策略(alpha版)
コンテナイメージに対して任意のチェックを行うためのWebhookの仕組みが追加されました。
Kubernetes: Image Policy Webhookとは に概要をまとめています。
访问审核 API(alpha 版本)
Kubernetes APIに対してのアクセス権があるかどうかのチェックを試せるWebAPIが追加されました。権限設定のデバッグなどに便利そうです。
下記のようなリクエストを送ると許可されているどうかが返ってくるイメージのようです。
{
"apiVersion": "authorization.k8s.io/v1beta1",
"kind": "SubjectAccessReview",
"spec": {
"resourceAttributes": {
"namespace": "kittensandponies",
"verb": "GET",
"group": "unicorn.example.org",
"resource": "pods"
},
"user": "jane",
"group": [
"group1",
"group2"
]
}
}
-
- https://github.com/kubernetes/features/issues/37
- http://kubernetes.io/docs/admin/authorization/#checking-api-access
大幅简化Kubernetes集群的创建过程(alpha版)
新增的名为kubeadm的新命令使得集群的构建变得非常容易。根据手册,似乎只需以下步骤即可构建集群。就像Swarm的swarm init/join一样,很容易就能组建集群。
-
- 各種コンポーネントのインストール
kubelet, docker, kubeadm, kubectlをapt-get, yumでインストールする
マスターの初期化
kubeadm init –use-kubernetes-version v1.4.0-beta.11
ノードの追加
kubeadm join –token
Podネットワークのインストール
kubectl apply -f https://git.io/weave-kube (WeaveNetの例)
- http://kubernetes.io/docs/getting-started-guides/kubeadm/
Kubelet TLS引导(alpha版)
为了让使用kubeadm能够轻松部署,似乎已经添加了TLS引导功能。在此之前,部署集群需要进行客户端证书的颁发以及TLS相关的配置,非常麻烦。在1.4版本中,内部增加了CA机制,每个节点会自动发送CSR(证书签名请求),只需批准即可完成证书的部署。
-
- https://github.com/kubernetes/features/issues/43
-
- http://kubernetes.io/docs/admin/master-node-communication/#kubelet-tls-bootstrap
- https://github.com/kubernetes/kubernetes/blob/master/docs/proposals/kubelet-tls-bootstrap.md
可配置动态供给,又称存储类(测试版)
1.3までのPersisnt Volume Claim(動的にPersisnte Volumeを確保するリソース)ではクラスタ毎に1つのプロビジョナーしか使用できませんでした。1.4では新しくStorageClassというものが追加され、複数のプロビジョナーを利用できるようになるようです。
通过为Persistent Volume Claim添加volume.beta.kubernetes.io/storage-class注释,可以指定存储类型。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
annotations:
volume.beta.kubernetes.io/storage-class: "slow"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
StorageClass似乎被单独定义为另一个资源,并且需要指定供应商。
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: slow
provisioner: kubernetes.io/aws-ebs
parameters:
type: io1
zone: us-east-1d
iopsPerGB: "10"
- http://kubernetes.io/docs/user-guide/persistent-volumes/#class
增加 sysctl 支持(alpha 版)
现在可以为每个Pod设置已被命名空间化的内核参数(sysctl设置)。
以下被定义为安全设置。
-
- kernel.shm_rmid_forced
-
- net.ipv4.ip_local_port_range
-
- net.ipv4.tcp_max_syn_backlog
- net.ipv4.tcp_syncookies
以下是一些默认情况下被禁用的不安全设置。(可以通过kubelet选项–experimental-allowed-unsafe-sysctls进行设置)
-
- kernel.msg*
-
- kernel.sem
-
- kernel.shm*
-
- fs.mqueue.*
- net.*
增加 AppArmor 支持(测试版)
Podに対してAppArmorのプロファイルの設定ができるようになりました。container.apparmor.security.beta.kubernetes.io/というアノテーションを使ってサーバーにロードされているAppArmorのプロファイルを以下のように設定できるようです。(yamlはマニュアルより)
apiVersion: v1
kind: Pod
metadata:
name: hello-apparmor
annotations:
# Tell Kubernetes to apply the AppArmor profile "k8s-apparmor-example-deny-write".
# Note that this is ignored if the Kubernetes node is not running version 1.4 or greater.
container.apparmor.security.beta.kubernetes.io/hello: localhost/k8s-apparmor-example-deny-write
spec:
containers:
- name: hello
image: busybox
command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]
-
- http://kubernetes.io/docs/admin/apparmor/
- https://github.com/kubernetes/features/issues/24
Pod之间的亲和/反亲和关系(alpha)
スケジューラに対しPodをどうスケジューリングするかを指定する機能です。例えばPod Aが動作しているノードでPod Bを動かしたいといった場合、もしくは逆の場合など高度なスケジューリングの指定ができます。
-
- https://github.com/kubernetes/features/issues/51
-
- http://kubernetes.io/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-alpha-feature
- https://github.com/kubernetes/kubernetes/blob/master/docs/design/podaffinity.md
Pod 安全策略
现在可以通过 Kubernetes 资源来控制集群级别的安全策略,如 Pod 可以执行的特权容器和可使用的 Linux 功能等。
-
- https://github.com/kubernetes/features/issues/5
- http://kubernetes.io/docs/user-guide/pod-security-policy/
审计(阿尔法)
新增了一个机制,用于记录Kubernetes API Server的审计日志。
看起来需要记录类似下述的日志。(来源:PR基本审核日志#27087)
AUDIT: id="b0a443ae-f7d8-408c-a355-eb9501fd5c59" ip="192.168.121.118" method="GET" user="system:admin" as="test-admin" namespace="openshift" uri="/api/v1/namespaces/openshift/pods/python"
AUDIT: id="b0a443ae-f7d8-408c-a355-eb9501fd5c59" response=200
- https://github.com/kubernetes/features/issues/22
关键集群附加Pod的优先调度(Alpha版)
クラスタの重要コンポーネント(DNS, Heapsterなど)に対してスケジューラが優先的に扱う機能が追加されました。 優先的に扱う条件は以下のようです。
kube-systemネームスペース内(変更可)
scheduler.alpha.kubernetes.io/critical-podラベルが空で設定されている
scheduler.alpha.kubernetes.io/tolerationsラベルが[{“key”:”CriticalAddonsOnly”, “operator”:”Exists”}]にに設定されている
请参考
-
- https://github.com/kubernetes/features/issues/62
- http://kubernetes.io/docs/admin/rescheduler/#guaranteed-scheduling-of-critical-add-on-pods
系统正确性:默认值的单一来源(稳定)
目前,资源的默认值在客户端(kubectl)和 API 服务器上都进行了设置,但现在统一在 API 服务器端进行设置。
- https://github.com/kubernetes/features/issues/55
Enable non-go clients: Move to Swagger 2.0 (beta)
swagger 2.0(OpenAPI)に対応し、golang以外のクライアントの生成が容易になりました。
- https://github.com/kubernetes/features/issues/53
当观测到磁盘压力时,kubelet会驱逐资源(测试版)
据我所知,当节点的磁盘容量变得紧张时,kubelet似乎会将Pod迁出。通过设置kubelet的–eviction-hard和–eviction-minimum-reclaim选项,可以配置节点fs.available磁盘容量,如下所示。
--eviction-hard=memory.available<500Mi,nodefs.available<1Gi,imagefs.available<100Gi
--eviction-minimum-reclaim="memory.available=0Mi,nodefs.available=500Mi,imagefs.available=2Gi"`
-
- http://kubernetes.io/docs/admin/out-of-resource/
- https://github.com/kubernetes/features/issues/39
添加存储卷插件
-
- New Volume Plugin: Quobyte
QuobyteのVolume Pluginが追加されました。
New Volume Plugin: Azure Data Disk
Microsoft AzureのAzure Data DiskのVolume Pluginが追加されました。
联邦
联邦(多集群协作功能)相关功能似乎正在稳步实施。
Federated Ingress for GCP (alpha)
Federated Replica Set (beta)
Federated Namespaces (plpha)
Federated Secrets (beta)
Federation Events (beta)
Simplified turn up (alpha)
Provide Ingress for Multi-Zone Clusters (alpha)