SlideShare a Scribd company logo
1 of 36
開發人員必須知道的 Kubernetes 核心技術
多奇數位創意有限公司
技術總監 黃保翕 ( Will 保哥 )
部落格:http://blog.miniasp.com/
Kubernetes Summit 2018
2
分享大綱
• 了解 Docker 運作方式
• 了解 Kubernetes 的運作架構
• 了解 Kubernetes 的常用物件
• 了解 Kubernetes 的部署方式
• 那些年開發人員經常在 K8S 遇到的鬼
Understanding Docker
了解 DOCKER 運作方式
4
了解「虛擬機器」與「容器」的差異
硬體層的虛擬化技術 作業系統層的虛擬化技術
5
認識 Docker 主從式架構
6
認識 Docker 映像階層架構 (Image Layers)
• Docker 映像檔採用一種
分層堆疊的運作方式
– 採用了 aufs 檔案系統
– 映像其實是由多個映像
堆疊而成的
– 建立映像的同時,
每個步驟都會建立一層映像
7
開發人員必須了解的事
1. 管理容器生命週期
2. 管理容器映像生命週期
3. 看得懂 Dockerfile 檔案
4. 了解容器發行管理的過程
8
管理容器生命週期與基本指令
• 建立映像實體 ( image instance ) ( container )
– docker run -it IMAGE COMMAND
• 列出所有容器
– docker ps -a
• 啟動指定容器
– docker start CONTAINER
• 在指定容器中執行命令
– docker exec -it CONTAINER cmd
• 顯示容器執行過程的主控台訊息
– docker logs CONTAINER
• 停止指定容器
– docker stop CONTAINER
• 刪除指定容器
– docker rm CONTAINER
9
管理容器映像生命週期與基本指令
• 列出所有容器映像 ( container image )
– docker images
• 搜尋容器映像 ( Docker Hub )
– docker search TERM
• 下載容器映像
– docker pull IMAGE
• 建立容器映像 ( 從現有容器建立 )
– docker commit CONTAINER IMAGE
• 建立容器映像 ( 從 Dockerfile 建立 )
– docker build -t REPO:TAG PATH
• 標記指定容器映像
– docker tag IMAGE[:TAG] NEWIMAGE[:TAG]
• 刪除指定容器映像
– docker rmi IMAGE
Understanding Kubernetes
了解 KUBERNETES的運作架構
11
Kubernetes 的主要用途
• K8S 是一個 微服務應用程式 的 協調器
( An Orchestrator for Microservice Apps )
• K8S 可全自動化的管理與調度容器執行!
全自動的配置容器要在叢集內的哪些節點執行
• K8S 用一種「抽象化」的方式管理容器執行
12
Kubernetes 的主要元件
• Master
– 叢集的大腦,負責控制所有 "節點" 執行必要的容器
– 負責調度有哪些 Pods 要安排到哪些 Nodes 運作
– 負責儲存叢集運作過程的所有狀態
• Nodes ( Minions )
– 負責管理所有容器執行
– 負責將指派要執行的 Pods 實體化
– 負責監控所有 Pod 執行的健康狀況
13
14
15
16
17
18
了解 KUBERNETES 的常用物件
The Kubernetes Objects
20
認識 Kubernetes 物件
• Pod K8S 部署應用程式的最小單位
• Deployment 定義應用程式部署的條件與參數
• Service 讓 Pod 提供對外連線的服務
• DaemonSet 讓 Pod 自動跑在所有 Nodes
• Volume 設定檔案存取的方式 (nfs, hostPath, …)
• Persistent Volume (PV)
– 將 Volume 物件封裝起來並提供額外的附加資訊 (capacity/accessModes)
• Persistent Volume Claim (PVC)
– 設定所需儲存空間的條件,並自動比對/取出適合的 PV 物件。
– 如果比對不到合適的 PV 物件,就會透過 StorageClasses 動態建立 PV
• Storage Classes
– 將儲存空間進行分類,幫助 PVC 動態建立 PV 物件
– 包含 provisioner, parameters, 與 reclaimPolicy 等欄位
21
認識 Desired State (期望狀態)
• 期望狀態 (Desired State)
– 我們透過建立 Kubernetes 物件來告知叢集該如何運行,
藉此建立一種 期望狀態 (Desired State)!
• 例如我們有個服務希望至少執行 3 個 Pods
– 這時 K8S 就會盡力幫我們在叢集中達成這個期望狀態
– 但是狀態經常會改變,例如人為變更或有 Nodes 掛掉
– 此時 Kubernetes 就會依據期望狀態盡力回復原狀
22
開發人員還需要認識的 Kubernetes 物件
• ConfigMaps
– 可以用來保存應用程式常用的參數設定
• SMTP IP
• LogPath
• 其他應用程式設定
• Secrets
– 可以用來保存應用程式需要安全保存的設定參數
• Passwords
• Password Salt
• Connection String
• Private Keys
23
• kubectl create configmap idpw --from-literal=password=123456
• kubectl get configmap idpw -o yaml
• kubectl create secret generic idpw --from-literal=password=123456
• kubectl get secret idpw -o yaml
了解 KUBERNETES 的部署方式
Deployments
25
應用程式佈署標準流程
• 建置好應用程式的容器映像 ( Image )
• 先確認在本機 Docker 進行測試執行無誤
• 將容器映像推送到 Docker Registry 保存
• 撰寫 Deployment 佈署腳本 (YAML)
• 建立 Deployment 物件
• 進入服務監控程序
26
示範一個完整的 K8S 開發佈署流程
• dotnet new mvc -n k8sdemo
• cd k8sdemo
• code .
• F1 > Docker: Add Docker files to Workspace
• 修改 Dockerfile
• docker build -t willh/k8sdemo:latest . --no-cache
• docker push willh/k8sdemo:latest
• docker run --rm -p 8080:80 willh/k8sdemo:latest
• kubectl run k8sdemo --image=willh/k8sdemo:latest
• kubectl expose deployment k8sdemo --type=NodePort
• kubectl get svc k8sdemo
• 撰寫 k8sdemo.deployment.yaml
• kubectl create -f k8sdemo.deployment.yaml
• kubectl delete -f k8sdemo.deployment.yaml
佈署到 K8S 之後的常見問題
Common Problems for Developers
28
部署到 K8S 的 Pods 怎樣都無法啟動
• 檢查步驟:
– 可以在本機 Docker 啟動程式嗎?
• 有沒有正確使用 Tag 在 Image 上?
– 執行時 Image 是否被快取住?
• imagePullPolicy: Always
• AlwaysPullImages
– 是否因為 Secrets 設定錯誤導致抓不到 Image
– kubectl describe
– kubectl logs
– /var/log/syslog
29
必須學會的偵錯技巧
• kubectl describe
– 從 K8S 叢集的角度看 Pod 的運作狀況
• 先看 Events 事件紀錄
• 如果看不懂 Events 事件說明,就要在繼續往下追查
• kubectl logs
– 查詢目前 Pods 中的 Console Logs
• kubectl logs --previous
– Pod 必須要有 Restart 才可以看出前一版的 Pod 紀錄
30
追查 kubelet 的詳細訊息記錄
• 每台 Node 都有個 kubelet 程式
• kubelet 主要用來接收 Master 下達的命令
• kubelet 會依據 Master 的命令對 Node 進行操作!
• 因此查看 kubelet 的訊息紀錄對了解問題幫助很大
• 你可以從系統記錄檔中看出 kubelet 在背後做了多
少事,包含硬碟爆掉會依序對 Pod 做什麼事情都一
清二楚,唯一的缺點是 Logs 非常多!
• 常見路徑
– /var/log/syslog (Ubuntu/Debian)
– /var/log/messages (RedHat Family)
31
服務不穩定 ( 每 10 ~ 15 天會當掉一次 )
• 真實案例
– 硬碟配置 50GB / 系統用掉 10GB 左右
– 每 10 ~ 15 天有個 Pod 會自動死掉
– 不是每次都會發現 Pod 死掉 (查的時候硬碟空間都還有)
• 問題分析
– 我們有個 Pod 由於流量大,每 3 天會寫入 8GB 資料
– 當硬碟不夠時,K8S 會開始自動清空用不到的資源,
最後會清除死掉的物件 (Pod),並且將記錄清空!(死無對證)
– 如果當 Pod 因為資源不足而被砍掉之後,所有 Logs 就
會消失,因此會查不出問題在哪!
– Configure Out Of Resource Handling
32
服務不穩定 ( 服務經常不明原因斷線 )
• 問題描述
– 原本的服務都非常正常
– 但有一天服務開始不穩定連線 (經常斷線)
– 沒有人知道為什麼
• 問題分析
– 剛開始用的時候,K8S 只有一個 Pod
– 所以一直以來都設定為同一個 Label
– 開始加入其他 Pods 時,開發人員不知道要調整 Label
– 最後導致 Service 經常選錯 Pod 連線!
– Labels and Selectors - Kubernetes
33
Logs 太多導致 k8s 爆掉的解決方案
• 解決方案 1: 定時砍掉所有的 Pods
– 這是開發人員自己的決定 ( 很髒,但有效 XD )
– 正確示範:kubectl delete pod -l component=web
– 錯誤示範:kubectl delete deployment -l component=web
– Logging at the node level
• 解決方案 2: 不要寫 Logs 在 Console
– 自己寫 Logs 在自訂檔案 (hostPath volume)
– 再搭配 logrotate 壓縮或備份 Logs
• 解決方案 3: 自己 hack Docker logs 的 logrotate 機制
– 由 Infra Team 負責撰寫這部分 Shell Script
學習資源
Learning Resources
35
相關連結
• Docker - Build, Ship, and Run Any App, Anywhere
• Kubernetes | Production-Grade Container Orchestration
• What are some good ways of learning Kubernetes? - Quora
• Kubectl tips and tricks - Discuss Kubernetes
• kubectl Cheat Sheet | Kubernetes
• JSON to YAML
• Play with Docker Classroom
• Play with Docker
• Play with Kubernetes
• Kubernetes - Visual Studio Marketplace ( GitHub )
• Visual Studio Kubernetes Tools (Preview)
• Azure Dev Spaces - Rapid, Iterative Kubernetes Development in Azure
36
聯絡資訊
• The Will Will Web
記載著 Will 在網路世界的學習心得與技術分享
– http://blog.miniasp.com/
• Will 保哥的技術交流中心 (臉書粉絲專頁)
– http://www.facebook.com/will.fans
• Will 保哥的噗浪
– http://www.plurk.com/willh/invite
• Will 保哥的推特
– https://twitter.com/Will_Huang

More Related Content

What's hot

我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事Poy Chang
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsYoshiyasu SAEKI
 
Kubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことKubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことh-otter
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善Works Applications
 
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi UmedaInsight Technology, Inc.
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春VerMasahito Zembutsu
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング佑哉 廣岡
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021whywaita
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
 
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Masaki Yamamoto
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 

What's hot (20)

Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
Kubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったことKubernetesのワーカーノードを自動修復するために必要だったこと
Kubernetesのワーカーノードを自動修復するために必要だったこと
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
 
OCIコンテナサービス関連の技術詳細
OCIコンテナサービス関連の技術詳細OCIコンテナサービス関連の技術詳細
OCIコンテナサービス関連の技術詳細
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 

Similar to 開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018

Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWill Huang
 
Oh K8s Is Swag - Kubernetes Basics
Oh K8s Is Swag - Kubernetes BasicsOh K8s Is Swag - Kubernetes Basics
Oh K8s Is Swag - Kubernetes BasicsOkis Chuang
 
Kvmopt osforce
Kvmopt osforceKvmopt osforce
Kvmopt osforcemeecheng
 
Debug Your Kubernetes Network
Debug Your Kubernetes NetworkDebug Your Kubernetes Network
Debug Your Kubernetes NetworkHungWei Chiu
 
基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展Sky Jian
 
ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1medcl
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLei (Harry) Zhang
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveOpenCity Community
 
OpenStack Introduction Ecosystem
OpenStack Introduction EcosystemOpenStack Introduction Ecosystem
OpenStack Introduction EcosystemNUTC, imac
 
20220224台中演講k8s
20220224台中演講k8s20220224台中演講k8s
20220224台中演講k8schabateryuhlin
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管Will Huang
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换mysqlops
 
Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Marc Huang
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版redhat9
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 

Similar to 開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018 (20)

Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, Kubernetes
 
Oh K8s Is Swag - Kubernetes Basics
Oh K8s Is Swag - Kubernetes BasicsOh K8s Is Swag - Kubernetes Basics
Oh K8s Is Swag - Kubernetes Basics
 
Kvmopt osforce
Kvmopt osforceKvmopt osforce
Kvmopt osforce
 
Debug Your Kubernetes Network
Debug Your Kubernetes NetworkDebug Your Kubernetes Network
Debug Your Kubernetes Network
 
基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展
 
ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The Hood
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
 
Develop Your Own Operating System
Develop Your Own Operating SystemDevelop Your Own Operating System
Develop Your Own Operating System
 
美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化
 
OpenStack Introduction Ecosystem
OpenStack Introduction EcosystemOpenStack Introduction Ecosystem
OpenStack Introduction Ecosystem
 
20220224台中演講k8s
20220224台中演講k8s20220224台中演講k8s
20220224台中演講k8s
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 

More from Will Huang

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)Will Huang
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境Will Huang
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索Will Huang
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!Will Huang
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧Will Huang
 
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)Will Huang
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)Will Huang
 
Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)Will Huang
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點Will Huang
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門Will Huang
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)Will Huang
 
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)Will Huang
 
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Will Huang
 
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)Will Huang
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Will Huang
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Will Huang
 
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)Will Huang
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)Will Huang
 
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)Will Huang
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)Will Huang
 

More from Will Huang (20)

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧
 
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
 
Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
 
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)
 
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
 
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
 
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
 

開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018

  • 1. 開發人員必須知道的 Kubernetes 核心技術 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/ Kubernetes Summit 2018
  • 2. 2 分享大綱 • 了解 Docker 運作方式 • 了解 Kubernetes 的運作架構 • 了解 Kubernetes 的常用物件 • 了解 Kubernetes 的部署方式 • 那些年開發人員經常在 K8S 遇到的鬼
  • 6. 6 認識 Docker 映像階層架構 (Image Layers) • Docker 映像檔採用一種 分層堆疊的運作方式 – 採用了 aufs 檔案系統 – 映像其實是由多個映像 堆疊而成的 – 建立映像的同時, 每個步驟都會建立一層映像
  • 7. 7 開發人員必須了解的事 1. 管理容器生命週期 2. 管理容器映像生命週期 3. 看得懂 Dockerfile 檔案 4. 了解容器發行管理的過程
  • 8. 8 管理容器生命週期與基本指令 • 建立映像實體 ( image instance ) ( container ) – docker run -it IMAGE COMMAND • 列出所有容器 – docker ps -a • 啟動指定容器 – docker start CONTAINER • 在指定容器中執行命令 – docker exec -it CONTAINER cmd • 顯示容器執行過程的主控台訊息 – docker logs CONTAINER • 停止指定容器 – docker stop CONTAINER • 刪除指定容器 – docker rm CONTAINER
  • 9. 9 管理容器映像生命週期與基本指令 • 列出所有容器映像 ( container image ) – docker images • 搜尋容器映像 ( Docker Hub ) – docker search TERM • 下載容器映像 – docker pull IMAGE • 建立容器映像 ( 從現有容器建立 ) – docker commit CONTAINER IMAGE • 建立容器映像 ( 從 Dockerfile 建立 ) – docker build -t REPO:TAG PATH • 標記指定容器映像 – docker tag IMAGE[:TAG] NEWIMAGE[:TAG] • 刪除指定容器映像 – docker rmi IMAGE
  • 11. 11 Kubernetes 的主要用途 • K8S 是一個 微服務應用程式 的 協調器 ( An Orchestrator for Microservice Apps ) • K8S 可全自動化的管理與調度容器執行! 全自動的配置容器要在叢集內的哪些節點執行 • K8S 用一種「抽象化」的方式管理容器執行
  • 12. 12 Kubernetes 的主要元件 • Master – 叢集的大腦,負責控制所有 "節點" 執行必要的容器 – 負責調度有哪些 Pods 要安排到哪些 Nodes 運作 – 負責儲存叢集運作過程的所有狀態 • Nodes ( Minions ) – 負責管理所有容器執行 – 負責將指派要執行的 Pods 實體化 – 負責監控所有 Pod 執行的健康狀況
  • 13. 13
  • 14. 14
  • 15. 15
  • 16. 16
  • 17. 17
  • 18. 18
  • 20. 20 認識 Kubernetes 物件 • Pod K8S 部署應用程式的最小單位 • Deployment 定義應用程式部署的條件與參數 • Service 讓 Pod 提供對外連線的服務 • DaemonSet 讓 Pod 自動跑在所有 Nodes • Volume 設定檔案存取的方式 (nfs, hostPath, …) • Persistent Volume (PV) – 將 Volume 物件封裝起來並提供額外的附加資訊 (capacity/accessModes) • Persistent Volume Claim (PVC) – 設定所需儲存空間的條件,並自動比對/取出適合的 PV 物件。 – 如果比對不到合適的 PV 物件,就會透過 StorageClasses 動態建立 PV • Storage Classes – 將儲存空間進行分類,幫助 PVC 動態建立 PV 物件 – 包含 provisioner, parameters, 與 reclaimPolicy 等欄位
  • 21. 21 認識 Desired State (期望狀態) • 期望狀態 (Desired State) – 我們透過建立 Kubernetes 物件來告知叢集該如何運行, 藉此建立一種 期望狀態 (Desired State)! • 例如我們有個服務希望至少執行 3 個 Pods – 這時 K8S 就會盡力幫我們在叢集中達成這個期望狀態 – 但是狀態經常會改變,例如人為變更或有 Nodes 掛掉 – 此時 Kubernetes 就會依據期望狀態盡力回復原狀
  • 22. 22 開發人員還需要認識的 Kubernetes 物件 • ConfigMaps – 可以用來保存應用程式常用的參數設定 • SMTP IP • LogPath • 其他應用程式設定 • Secrets – 可以用來保存應用程式需要安全保存的設定參數 • Passwords • Password Salt • Connection String • Private Keys
  • 23. 23 • kubectl create configmap idpw --from-literal=password=123456 • kubectl get configmap idpw -o yaml • kubectl create secret generic idpw --from-literal=password=123456 • kubectl get secret idpw -o yaml
  • 25. 25 應用程式佈署標準流程 • 建置好應用程式的容器映像 ( Image ) • 先確認在本機 Docker 進行測試執行無誤 • 將容器映像推送到 Docker Registry 保存 • 撰寫 Deployment 佈署腳本 (YAML) • 建立 Deployment 物件 • 進入服務監控程序
  • 26. 26 示範一個完整的 K8S 開發佈署流程 • dotnet new mvc -n k8sdemo • cd k8sdemo • code . • F1 > Docker: Add Docker files to Workspace • 修改 Dockerfile • docker build -t willh/k8sdemo:latest . --no-cache • docker push willh/k8sdemo:latest • docker run --rm -p 8080:80 willh/k8sdemo:latest • kubectl run k8sdemo --image=willh/k8sdemo:latest • kubectl expose deployment k8sdemo --type=NodePort • kubectl get svc k8sdemo • 撰寫 k8sdemo.deployment.yaml • kubectl create -f k8sdemo.deployment.yaml • kubectl delete -f k8sdemo.deployment.yaml
  • 28. 28 部署到 K8S 的 Pods 怎樣都無法啟動 • 檢查步驟: – 可以在本機 Docker 啟動程式嗎? • 有沒有正確使用 Tag 在 Image 上? – 執行時 Image 是否被快取住? • imagePullPolicy: Always • AlwaysPullImages – 是否因為 Secrets 設定錯誤導致抓不到 Image – kubectl describe – kubectl logs – /var/log/syslog
  • 29. 29 必須學會的偵錯技巧 • kubectl describe – 從 K8S 叢集的角度看 Pod 的運作狀況 • 先看 Events 事件紀錄 • 如果看不懂 Events 事件說明,就要在繼續往下追查 • kubectl logs – 查詢目前 Pods 中的 Console Logs • kubectl logs --previous – Pod 必須要有 Restart 才可以看出前一版的 Pod 紀錄
  • 30. 30 追查 kubelet 的詳細訊息記錄 • 每台 Node 都有個 kubelet 程式 • kubelet 主要用來接收 Master 下達的命令 • kubelet 會依據 Master 的命令對 Node 進行操作! • 因此查看 kubelet 的訊息紀錄對了解問題幫助很大 • 你可以從系統記錄檔中看出 kubelet 在背後做了多 少事,包含硬碟爆掉會依序對 Pod 做什麼事情都一 清二楚,唯一的缺點是 Logs 非常多! • 常見路徑 – /var/log/syslog (Ubuntu/Debian) – /var/log/messages (RedHat Family)
  • 31. 31 服務不穩定 ( 每 10 ~ 15 天會當掉一次 ) • 真實案例 – 硬碟配置 50GB / 系統用掉 10GB 左右 – 每 10 ~ 15 天有個 Pod 會自動死掉 – 不是每次都會發現 Pod 死掉 (查的時候硬碟空間都還有) • 問題分析 – 我們有個 Pod 由於流量大,每 3 天會寫入 8GB 資料 – 當硬碟不夠時,K8S 會開始自動清空用不到的資源, 最後會清除死掉的物件 (Pod),並且將記錄清空!(死無對證) – 如果當 Pod 因為資源不足而被砍掉之後,所有 Logs 就 會消失,因此會查不出問題在哪! – Configure Out Of Resource Handling
  • 32. 32 服務不穩定 ( 服務經常不明原因斷線 ) • 問題描述 – 原本的服務都非常正常 – 但有一天服務開始不穩定連線 (經常斷線) – 沒有人知道為什麼 • 問題分析 – 剛開始用的時候,K8S 只有一個 Pod – 所以一直以來都設定為同一個 Label – 開始加入其他 Pods 時,開發人員不知道要調整 Label – 最後導致 Service 經常選錯 Pod 連線! – Labels and Selectors - Kubernetes
  • 33. 33 Logs 太多導致 k8s 爆掉的解決方案 • 解決方案 1: 定時砍掉所有的 Pods – 這是開發人員自己的決定 ( 很髒,但有效 XD ) – 正確示範:kubectl delete pod -l component=web – 錯誤示範:kubectl delete deployment -l component=web – Logging at the node level • 解決方案 2: 不要寫 Logs 在 Console – 自己寫 Logs 在自訂檔案 (hostPath volume) – 再搭配 logrotate 壓縮或備份 Logs • 解決方案 3: 自己 hack Docker logs 的 logrotate 機制 – 由 Infra Team 負責撰寫這部分 Shell Script
  • 35. 35 相關連結 • Docker - Build, Ship, and Run Any App, Anywhere • Kubernetes | Production-Grade Container Orchestration • What are some good ways of learning Kubernetes? - Quora • Kubectl tips and tricks - Discuss Kubernetes • kubectl Cheat Sheet | Kubernetes • JSON to YAML • Play with Docker Classroom • Play with Docker • Play with Kubernetes • Kubernetes - Visual Studio Marketplace ( GitHub ) • Visual Studio Kubernetes Tools (Preview) • Azure Dev Spaces - Rapid, Iterative Kubernetes Development in Azure
  • 36. 36 聯絡資訊 • The Will Will Web 記載著 Will 在網路世界的學習心得與技術分享 – http://blog.miniasp.com/ • Will 保哥的技術交流中心 (臉書粉絲專頁) – http://www.facebook.com/will.fans • Will 保哥的噗浪 – http://www.plurk.com/willh/invite • Will 保哥的推特 – https://twitter.com/Will_Huang