Slide 1

Slide 1 text

Kyle bai R&D @ inwinSTACK www.inwinstack.com Kubernetes Project Update and How To Contribute

Slide 2

Slide 2 text

Job R&D @ inwinSTACK Description 早期在校主要撰寫 java 與 objc 程式語⾔言,並專注於 Mobile 應⽤用程式開發,具備四年年開發經驗,次要研讀 Hadoop 與 Spark 資料運算框架,以及 Linux 相關技術。 ⼯工作期間則專注於 OpenStack、Ceph 等 Cloud Native 相 關技術與開源專案,閒暇之餘會參參與相關專案社區及貢 獻,並利利⽤用部落落格、GitHub 與 GitBook 做筆記。 Drink Coffee Mobile Love Good! #7727 Buttocks kairen([email protected]) https://kairen.github.io/ About Me Kyle Bai

Slide 3

Slide 3 text

Kubernetes 47% Containers remain the top emerging technology of interest to users. Among those currently deploying container orchestration or platform services on OpenStack, 47% are using Kubernetes. An introduction for Kubernetes Major features in Kubernetes 1.7 What's new in Kubernetes 1.8? How to contribute Agenda Today I will talk about

Slide 4

Slide 4 text

An introduction for Kubernetes

Slide 5

Slide 5 text

Kubernetes Kubernetes 是 Google 開源的容器(Container)分散式管理理系 統,是 Google ⼗十幾年年以來來⼤大規模應⽤用容器技術的經驗累積和昇 華的⼀一個重要成果,是建於 Container(OCI標準容器)之上的容器 叢集排程服務,簡稱為K8s( )。 ⽬目前為 CNCF 專案之⼀一。 Stars 25,830+ Commits 52,905+ Contributors 1,331+

Slide 6

Slide 6 text

Kubernetes Pros 資源監控 Monitoring 滾動升級 Rolling-update ⾼高可靠性 High-availability ⾃自我修復 Self-healing 雲端⽀支援 Cloud Provider 持久性儲存 Persistent Volumes 組態檔案 Configmap 安全性 Secret Kubernetes 管理理跨區域與主機的容器節點,提供基本部署、維運、管 理理,以及執⾏行行各項應⽤用程式,並具備多種特性。

Slide 7

Slide 7 text

Container Management Platforms Preferences https://www.cncf.io/blog/2017/01/17/container-management-trends-kubernetes-moves-testing-production/

Slide 8

Slide 8 text

Kubernetes Adoption

Slide 9

Slide 9 text

Kubernetes 2017 Release Timeline v1.6 v1.9 v1.8 v1.7 September(Q3) December(Q4) March(Q1) June(Q2)

Slide 10

Slide 10 text

Major features in Kubernetes 1.7 Security, Workloads and Extensibility. https://github.com/kubernetes/features

Slide 11

Slide 11 text

API aggregation ⽬目前為 Beta,主要⽬目標是將單體 API Server 拆分多個聚合的 Server,這 樣每個⼈人都可以撰寫⾃自⼰己的 API Server 來來進⾏行行聚合。 • 提升擴展性 • 適合應⽤用於測試⽤用 API 上 • 保證新建立 API 符合 Kubernetes 約束 https://github.com/kubernetes/sample-apiserver

Slide 12

Slide 12 text

API aggregation

Slide 13

Slide 13 text

API aggregation

Slide 14

Slide 14 text

Extensible External Admission Control • 主要⽬目的是替 API Server 新增⾃自定義的邏輯業務,以便便在建立與驗證 策略略時更更新物件。 • 這使管理理者或者供應商能夠定義⾃自⼰己的策略略來來允許指定內容進入⾄至他們 的 Kubernetes 叢集。 • ⽬目前是 Alpha 功能,預設不啟⽤用。若若要使⽤用可以在 kube-apiserver 的 -- admission-control 參參數加入 GenericAdmissionWebhook。

Slide 15

Slide 15 text

Limit node access to API server • 新增 Node authorizer 模式,以及 NodeRestriction 管理理 Plugin,主要 ⽬目標是⽤用來來限制 Node 對某些 API 的存取。 • 這使得 Node 只能修改⾃自⼰己的 API 物件,以及這之上的 Pod 物件,或 者接收這些 Pod 上的 Secrets 與 Configmaps。

Slide 16

Slide 16 text

Custom Resource Definition • 棄⽤用 TPR。取得代之為更更加輕量量的 API,Custom Resource Definitions(CRD)。 • CRD 解決了了 TPR beta 測試時出現的問題和邊緣場景。 • 1.8 版本將完全刪除所有 TPR 的 API,所以請將⽬目前已使⽤用 TPR 功能遷 移到 CRD 上。

Slide 17

Slide 17 text

Create custom objects for CRD 這邊是利利⽤用 CRD 來來簡單的定義 ⼀一個 CronTab resource 。

Slide 18

Slide 18 text

Encrypting secrets in etcd • 新增加密機制,這使儲存在 Etcd 中的 Secrets 敏感的資料能夠進⾏行行加 密。 • 在 Secret 被讀寫⾄至 Etcd 之前,將資料進⾏行行加密,這個加密可以根據使 ⽤用者需求進⾏行行調整。

Slide 19

Slide 19 text

Local persistent storage • 透過 StorageClasses 與 PVC/ PV 來來提供 Local persistent storage 的存取。 • 這是比 hostPath volume 更更加 可靠的本地持久性資料模型。

Slide 20

Slide 20 text

Network Policy API • NetworkPolicy API ⽬目前更更新為 GA 版本。 • NetworkPolicy 新增對 Ingress 選擇 Pods 的策略略。 https://ahmet.im/blog/kubernetes-network-policy/

Slide 21

Slide 21 text

Audit logs improvements • API Server 儲存的稽核⽇日誌可以客制化與擴展,並⽀支援事件過濾與 Webhook 功能。 • 提供更更多的資料⽤用於系統稽核,這提升從⼤大量量資料中過濾出有意義的⽇日 誌訊息,以更更快地瞭解問題。

Slide 22

Slide 22 text

StatefulSet workloads 新增 StatefulSet 的 Rolling updates,與 Controller History,更更新策略略 有以下: • RollingUpdate:改動所有 Pod,並符合 StatefulSet 約束。 • Partitioned:只改動部分的 Pod。 • OnDelete:當 Pod 被⼿手動刪除時重新建立。

Slide 23

Slide 23 text

DaemonSets workloads 新增 DaemonSet 的 History 和 Rolling back: • 利利⽤用 PodTemplate 儲存 DaemonSet History。 • 在伺服端實現 Rolling back,主要是利利⽤用 RollbackConfig,類似 Deployment。

Slide 24

Slide 24 text

Container Runtime Interface (CRI) • 新增新的 RPC call 以及增強⼀一些功能,如優化可調式性、容器與映像 檔系統 Metrics 與統計訊息,以幫助檢索 Container Runtime 的 Metrics。 • 新增 Kubelet 不啟⽤用從 Container Runtime 收集 Metrics 資料。 • 將 Containerd 整合⾄至 Kubelet 中,提供更更輕量量的 Container Runtime。

Slide 25

Slide 25 text

Pod HostAliases • 透過 hostAliases 來來定義 hostname 條⽬目⾄至 Pod-level 中的 /etc/hosts。 其條⽬目包含 Pod 本⾝身的主機名稱解析。 $ kubectl logs hostaliases-pod # Kubernetes-managed hosts file. 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet fe00::0 ip6-mcastprefix fe00::1 ip6-allnodes fe00::2 ip6-allrouters 10.244.135.10 hostaliases-pod 127.0.0.1 foo.local 127.0.0.1 bar.local 10.1.2.3 foo.remote 10.1.2.3 bar.remote

Slide 26

Slide 26 text

PodDisruptionBudget(PDB) • 新增⼀一個 Beta 參參數 MaxUnavailable ,透過該參參數可以設定最⼤大不可 ⽤用 Pod 數,來來提供 drain 指令不會在同⼀一時間操作太多 Pod 數。

Slide 27

Slide 27 text

What's new in Kubernetes 1.8? https://github.com/kubernetes/features

Slide 28

Slide 28 text

SIG in 1.8 release • SIG Node: 持續專注在⽀支持最廣泛的⼯工作負載類型。這包含較敏感的硬 體與效能⼯工作負載,如資料分析與深度學習,同時提升節點可靠性。新 增 CRI-O support ⽀支援與動態的 Kubelet 組態。 • SIG Network:主要加強 NetworkPolicy API,以⽀支援 Pod Egress 規 則,另外改進 kube-proxy 新增 IPVS 模式(alpha),⽬目前為 iptables 與 userspace 模式。

Slide 29

Slide 29 text

SIG in 1.8 release • SIG Storage:擴展 Storage API 以提供更更多功能,如 resizing(alpha) 與 snapshotting(prototype)。另外專注提供更更多儲存控制權,如 Ephemeral storage 的 requests & limits 設定、提供更更多的 metrics 或改進 driver 等。 • SIG Autoscaling:專注於引入穩定的功能,如新版本的 HPA API(⽀支援⾃自定義 Metrics),以及 Cluster Autoscaler(改進效能與錯誤報告,⽬目前只⽀支援 GCE/ GKE)。 • SIG Instrumentation:專注於提供穩定版本⽀支援新的 HPA API 所需的 Resource metrics API、Custom metrics API、Metrics-server 與 Default monitoring pipeline(取代 Heapster)。

Slide 30

Slide 30 text

Kubernetes workloads API • DaemonSet、Deployment、ReplicaSet 與 StatefulSet kinds 的 API Group 更更新 到 apps/v1beta2。未來來可能會成為 GA 推廣版本。 • 該版本會引入棄⽤用⼀一些 API與⾏行行為變化,如 batch/v2alpha1.CronJob 棄⽤用、 TPR 與 batch/v2alpha1.ScheduledJobs 移除、autoscaling/v2alpha1 更更新⾄至 autoscaling/v2beta1 等。 • Annotation initContainer 已棄⽤用,請直接在 Pod spec 設定 initContainers。 • Advanced auditing 從 v1alpha1 更更新⾄至 v1beta1 。當使⽤用 Advanced auditing gate 時,稽核⽇日誌檔案預設採⽤用 JSON encoding。

Slide 31

Slide 31 text

Network Policy API • 新增基於 CIDR 的 NetworkPolicy。 • ⽀支援在 NetworkPolicy 制定 EgressRules。

Slide 32

Slide 32 text

Custom Resource Definition • CRD API 現在可以在 CRD spec 選擇驗證基於 JSON schema 的⾃自定 義物件。 • Garbage Collector 現在⽀支援 CRD 與 Aggregate API servers。

Slide 33

Slide 33 text

Roles Based Access Control (RBAC) • RBAC API Group 正式從 v1beta1 進入 v1,RBAC v1alpha1 API group 棄⽤用。 • ⽬目前官⽅方開始提倡在⽣生產環境中採⽤用 RBAC。現在很多授權模式預設都 會使⽤用 RBAC,這已經是⼀一個叢集基本的安全⽀支援。

Slide 34

Slide 34 text

Scheduling • Opaque Integer Resources (OIRs) ⽬目前已棄⽤用,也將在 v1.9 版本移除。 • Extended Resources (ERs) 成為 OIRs 的替代 Resource。 • 使⽤用者能夠使⽤用 kubernetes.io/ domain 之外的任何域名前輟,不再是使 ⽤用 pod.alpha.kubernetes.io/opaque-int-resource- prefix。

Slide 35

Slide 35 text

Autoscaling • 現在不建議從 Heapster 取得 metrics,這已經棄⽤用,請透過 Resource metrics API 的聚合來來取得 Metrics。 • 透過 --horizontal-pod-autoscaler-use-rest-clients 參參數來來設定。在 1.9 版本會是預設啟⽤用。

Slide 36

Slide 36 text

Storage • 現在 iSCSI 與 Fibre Channel ⽀支援 RWO 的 Attach/Detach。 • 可透過 Kubernetes metrics API 來來取得 PV ⽬目前可⽤用的容量量。新增 Volume Plugin Metrics。 • 新增可透過 API 達到 Volume resizing 功能(Gluster),但⽬目前只是單純 增加 Volume ⼤大⼩小,底層儲存或檔案系統並不會實際調整。 • 新增 Volume Snapshots 功能,⽬目前是⼀一個原型測試階段。

Slide 37

Slide 37 text

CLI Changes • ⽬目前 kubectl rollout 的 history、status、undo ⼦子指令與 scale 指令 已⽀支援 StatefulSets。 • 刪除⼀一些已棄⽤用指令,如 kubectl stop。 • kubectl run --env 不再⽀支援 CSV parsing。

Slide 38

Slide 38 text

Cluster Lifecycle • kubeadm:現在⽀支援 upgrade 指令來來⾃自動升級 self-hosted 的 Kubernetes 叢集。 • kops:現在⽀支援 bare metal(Alpha) 與 GCE(轉為Beta). • kubespray(incubator):⽀支援了了 kubeadm 的 HA 部署⽅方案,預設啟⽤用 Kubernetes Dashboard。

Slide 39

Slide 39 text

Other Projects • Dashboard:新增 zh-TW 的 i18n 處理理,另外加入更更多 Resource 的顯 ⽰示,並新增登入⾴頁⾯面功能。 • test-infra:⼀一致性 e2e 測試現在⽀支援 arm、arm64 與 ppc64le 平台 (Kubernetes Core)。

Slide 40

Slide 40 text

How to contribute

Slide 41

Slide 41 text

Kubernetes Community Contribution Kubernetes 可以以多種⽅方式來來進⾏行行社區貢獻: • 回報程式碼 Bug 與提交問題。 • 修改 Bug、問題或是功能實現。 • 新增或修改官⽅方檔案。 • 協助使⽤用者解決遇到的問題。 • 參參加 Special Interest Groups 會議。 https://github.com/kubernetes/community/blob/master/contributors/devel/community-expectations.md

Slide 42

Slide 42 text

Contribute Git workflow

Slide 43

Slide 43 text

Speed up PR merge 若若想要加快 PR 被 merge 的話,可以透過以下⽅方式來來達成: • 透過⼩小的 Commit 來來將不同功能程式拆分到不同 Commit 或 PR 中,來來⽅方便便檢閱。 • 對於 PR 與邏輯進⾏行行更更多說明。 • 開發程式碼遵守約束,如 Coding Conventions、API Conventions 和 kubectl Conventions。 • 確認修改部分能夠跑過本地單元與功能等測試。 • 利利⽤用 k8s-ci-robot 指令設定正確的標籤與重新失敗測試。