Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes Project Update and How To Contribute

Kyle Bai
December 22, 2017

Kubernetes Project Update and How To Contribute

Kyle Bai

December 22, 2017
Tweet

More Decks by Kyle Bai

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. Kubernetes Pros 資源監控 Monitoring 滾動升級 Rolling-update ⾼高可靠性 High-availability ⾃自我修復 Self-healing

    雲端⽀支援 Cloud Provider 持久性儲存 Persistent Volumes 組態檔案 Configmap 安全性 Secret Kubernetes 管理理跨區域與主機的容器節點,提供基本部署、維運、管 理理,以及執⾏行行各項應⽤用程式,並具備多種特性。
  4. API aggregation ⽬目前為 Beta,主要⽬目標是將單體 API Server 拆分多個聚合的 Server,這 樣每個⼈人都可以撰寫⾃自⼰己的 API

    Server 來來進⾏行行聚合。 • 提升擴展性 • 適合應⽤用於測試⽤用 API 上 • 保證新建立 API 符合 Kubernetes 約束 https://github.com/kubernetes/sample-apiserver
  5. Extensible External Admission Control • 主要⽬目的是替 API Server 新增⾃自定義的邏輯業務,以便便在建立與驗證 策略略時更更新物件。

    • 這使管理理者或者供應商能夠定義⾃自⼰己的策略略來來允許指定內容進入⾄至他們 的 Kubernetes 叢集。 • ⽬目前是 Alpha 功能,預設不啟⽤用。若若要使⽤用可以在 kube-apiserver 的 -- admission-control 參參數加入 GenericAdmissionWebhook。
  6. Limit node access to API server • 新增 Node authorizer

    模式,以及 NodeRestriction 管理理 Plugin,主要 ⽬目標是⽤用來來限制 Node 對某些 API 的存取。 • 這使得 Node 只能修改⾃自⼰己的 API 物件,以及這之上的 Pod 物件,或 者接收這些 Pod 上的 Secrets 與 Configmaps。
  7. Custom Resource Definition • 棄⽤用 TPR。取得代之為更更加輕量量的 API,Custom Resource Definitions(CRD)。 •

    CRD 解決了了 TPR beta 測試時出現的問題和邊緣場景。 • 1.8 版本將完全刪除所有 TPR 的 API,所以請將⽬目前已使⽤用 TPR 功能遷 移到 CRD 上。
  8. Encrypting secrets in etcd • 新增加密機制,這使儲存在 Etcd 中的 Secrets 敏感的資料能夠進⾏行行加

    密。 • 在 Secret 被讀寫⾄至 Etcd 之前,將資料進⾏行行加密,這個加密可以根據使 ⽤用者需求進⾏行行調整。
  9. Local persistent storage • 透過 StorageClasses 與 PVC/ PV 來來提供

    Local persistent storage 的存取。 • 這是比 hostPath volume 更更加 可靠的本地持久性資料模型。
  10. Network Policy API • NetworkPolicy API ⽬目前更更新為 GA 版本。 •

    NetworkPolicy 新增對 Ingress 選擇 Pods 的策略略。 https://ahmet.im/blog/kubernetes-network-policy/
  11. Audit logs improvements • API Server 儲存的稽核⽇日誌可以客制化與擴展,並⽀支援事件過濾與 Webhook 功能。 •

    提供更更多的資料⽤用於系統稽核,這提升從⼤大量量資料中過濾出有意義的⽇日 誌訊息,以更更快地瞭解問題。
  12. StatefulSet workloads 新增 StatefulSet 的 Rolling updates,與 Controller History,更更新策略略 有以下:

    • RollingUpdate:改動所有 Pod,並符合 StatefulSet 約束。 • Partitioned:只改動部分的 Pod。 • OnDelete:當 Pod 被⼿手動刪除時重新建立。
  13. DaemonSets workloads 新增 DaemonSet 的 History 和 Rolling back: •

    利利⽤用 PodTemplate 儲存 DaemonSet History。 • 在伺服端實現 Rolling back,主要是利利⽤用 RollbackConfig,類似 Deployment。
  14. Container Runtime Interface (CRI) • 新增新的 RPC call 以及增強⼀一些功能,如優化可調式性、容器與映像 檔系統

    Metrics 與統計訊息,以幫助檢索 Container Runtime 的 Metrics。 • 新增 Kubelet 不啟⽤用從 Container Runtime 收集 Metrics 資料。 • 將 Containerd 整合⾄至 Kubelet 中,提供更更輕量量的 Container Runtime。
  15. 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
  16. SIG in 1.8 release • SIG Node: 持續專注在⽀支持最廣泛的⼯工作負載類型。這包含較敏感的硬 體與效能⼯工作負載,如資料分析與深度學習,同時提升節點可靠性。新 增

    CRI-O support ⽀支援與動態的 Kubelet 組態。 • SIG Network:主要加強 NetworkPolicy API,以⽀支援 Pod Egress 規 則,另外改進 kube-proxy 新增 IPVS 模式(alpha),⽬目前為 iptables 與 userspace 模式。
  17. 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)。
  18. 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。
  19. Custom Resource Definition • CRD API 現在可以在 CRD spec 選擇驗證基於

    JSON schema 的⾃自定 義物件。 • Garbage Collector 現在⽀支援 CRD 與 Aggregate API servers。
  20. Roles Based Access Control (RBAC) • RBAC API Group 正式從

    v1beta1 進入 v1,RBAC v1alpha1 API group 棄⽤用。 • ⽬目前官⽅方開始提倡在⽣生產環境中採⽤用 RBAC。現在很多授權模式預設都 會使⽤用 RBAC,這已經是⼀一個叢集基本的安全⽀支援。
  21. Scheduling • Opaque Integer Resources (OIRs) ⽬目前已棄⽤用,也將在 v1.9 版本移除。 •

    Extended Resources (ERs) 成為 OIRs 的替代 Resource。 • 使⽤用者能夠使⽤用 kubernetes.io/ domain 之外的任何域名前輟,不再是使 ⽤用 pod.alpha.kubernetes.io/opaque-int-resource- prefix。
  22. Autoscaling • 現在不建議從 Heapster 取得 metrics,這已經棄⽤用,請透過 Resource metrics API 的聚合來來取得

    Metrics。 • 透過 --horizontal-pod-autoscaler-use-rest-clients 參參數來來設定。在 1.9 版本會是預設啟⽤用。
  23. Storage • 現在 iSCSI 與 Fibre Channel ⽀支援 RWO 的

    Attach/Detach。 • 可透過 Kubernetes metrics API 來來取得 PV ⽬目前可⽤用的容量量。新增 Volume Plugin Metrics。 • 新增可透過 API 達到 Volume resizing 功能(Gluster),但⽬目前只是單純 增加 Volume ⼤大⼩小,底層儲存或檔案系統並不會實際調整。 • 新增 Volume Snapshots 功能,⽬目前是⼀一個原型測試階段。
  24. CLI Changes • ⽬目前 kubectl rollout 的 history、status、undo ⼦子指令與 scale

    指令 已⽀支援 StatefulSets。 • 刪除⼀一些已棄⽤用指令,如 kubectl stop。 • kubectl run --env 不再⽀支援 CSV parsing。
  25. Cluster Lifecycle • kubeadm:現在⽀支援 upgrade 指令來來⾃自動升級 self-hosted 的 Kubernetes 叢集。

    • kops:現在⽀支援 bare metal(Alpha) 與 GCE(轉為Beta). • kubespray(incubator):⽀支援了了 kubeadm 的 HA 部署⽅方案,預設啟⽤用 Kubernetes Dashboard。
  26. Other Projects • Dashboard:新增 zh-TW 的 i18n 處理理,另外加入更更多 Resource 的顯

    ⽰示,並新增登入⾴頁⾯面功能。 • test-infra:⼀一致性 e2e 測試現在⽀支援 arm、arm64 與 ppc64le 平台 (Kubernetes Core)。
  27. Kubernetes Community Contribution Kubernetes 可以以多種⽅方式來來進⾏行行社區貢獻: • 回報程式碼 Bug 與提交問題。 •

    修改 Bug、問題或是功能實現。 • 新增或修改官⽅方檔案。 • 協助使⽤用者解決遇到的問題。 • 參參加 Special Interest Groups 會議。 https://github.com/kubernetes/community/blob/master/contributors/devel/community-expectations.md
  28. Speed up PR merge 若若想要加快 PR 被 merge 的話,可以透過以下⽅方式來來達成: •

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