# K8s OverView > [name=李俊毅] > [time=Thur, Feb 9, 2020 4:00 PM] --- ## Agenda * K8s Concepts * K8s CLI * K8s YAML * Demo * 課後動腦 --- ## K8s Concepts ---- ### 什麼是K8s ---- ![](https://i.imgur.com/o6y8g3t.png) ---- K8S是kubernetes縮寫,是一套管理容器的平台,是由 Pod、Node、 Master 組合而成 ---- ### K8s特性 | | | | ---------- | --------------------- | | 無維護更新 | 支援滾動式更新 | | 分流機制 | 負載均衡和服務發現 | | 高可用性 | 支援自動擴展與伸縮 | ---- ### Pod ![](https://i.imgur.com/U9cc78P.png) ---- ### Node ![](https://i.imgur.com/GTvp76q.png) ---- ### K8s架構 ![](https://i.imgur.com/k73fV7L.png) ---- | Item | Description | | ------------------ | ------------------------------------------------------------ | | etcd | 保存了整個性能的狀態 | | apiserver | 提供了資源操作的唯一入口,並提供認證,授權,訪問控制,API XML和發現等機制| | controller manager | 負責維護維護的狀態,可以進行故障檢測,自動擴展,滾動更新等 | | scheduler | 負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上 | ---- | Item | Description | | ----------------- | ------------------------------------------ | | Network | 負責網絡管理 | | kubelet | 接收 API Server 任務及向API Server註冊節點訊息 | | container runtime | 負責監督管理Pod和容器 | | kube-proxy | 負責為服務提供群集內部的服務發現和負載均衡 | --- ## K8s CLI ---- ### 什麼是 Kubectl 用來控制Kubernetes集群的命令行工具 ---- ### Kubectl 語法 <style> code { font-size: x-large; text-align: center; } </style> ``` kubectl [command] [TYPE] [NAME] [flags] ``` ---- ### 例子 ``` kubectl get pods ``` ---- ### Kubectl 基本指令 * [kubectl run](/xySj55yxQHSD8lNzOonDqg) * [kubectl create](/1tqmi8swQmG2cs02H-DIIQ) * [kubectl expose](/jVYfSpJRTQCvqMhWN6E9vA) * [kubectl get](/OFOW10I6RK6IufcwzQuAvg) * [kubectl logs](/nABxzf0_Sii5ruhxyoAmRQ) * [kubectl delete](/VNcRZzh9QyeaIs14zARpKQ) * [kubectl exec](/6GrDz8U6T_KcH4n7pS2rZA) * [kubectl apply](/B1ZUio8yTOe-Xeg_fmw9iQ) * [kubectl version](/vgtGAfQZQRKKy8O7nWYXsQ) * [kubectl cluster-info](/1ECYMUZdTUqp75hn5zh_NQ) ---- ### 與 Docker 指令關係 ---- #### Docker run <h5 style="text-align: left;">使用docker:</h5> ``` docker run -d --name nginx-app -p 80:80 --restart=always nginx:1.8 ``` </br> <h5 style="text-align: left;">使用kubectl:</h5> <style> code { text-align: left; } </style> ``` kubectl run nginx-app --image=nginx:1.8 --port=80 kubectl expose deploy nginx-app --type=NodePort --port=80 --target-port=80 --name=nginx-http ``` ---- #### Docker ps <h5 style="text-align: left;">使用docker:</h5> ``` docker ps -a ``` </br> <h5 style="text-align: left;">使用kubectl:</h5> ``` kubectl get pods --all-namespaces ``` ---- #### Docker exec <h5 style="text-align: left;">使用docker:</h5> ``` docker exec -it nginx-app bash ``` </br> <h5 style="text-align: left;">使用kubectl:</h5> ``` kubectl exec -it nginx-app-769f5f6985-79hh4 bash ``` ---- #### Docker logs <h5 style="text-align: left;">使用docker:</h5> ``` docker logs -f nginx-app ``` </br> <h5 style="text-align: left;">使用kubectl:</h5> ``` kubectl logs -f nginx-app-769f5f6985-79hh4 ``` ---- #### Docker rm <h5 style="text-align: left;">使用docker:</h5> ``` docker rm nginx-app ``` </br> <h5 style="text-align: left;">使用kubectl:</h5> ``` kubectl delete deployment nginx-app ``` ---- #### Docker version <h5 style="text-align: left;">使用docker:</h5> ``` docker version ``` </br> <h5 style="text-align: left;">使用kubectl:</h5> ``` kubectl version ``` ---- #### Docker info <h5 style="text-align: left;">使用docker:</h5> ``` docker info ``` </br> <h5 style="text-align: left;">使用kubectl:</h5> ``` kubectl cluster-info ``` --- ## K8s YAML ---- ### 什麼是 YAML 原本透過 Kubectl run 命令運行 deployment,可透過 YAML 進行配置與代碼化 ---- ### 常用的資源型態 * [Deployment](/yjIGaKU9SHa07gS8ubQ11g) * [Service](/s7DKutPBTAOhCrUnhlgj7g) ---- #### Deployment Concepts ---- Deployment 透過 ReplicaSet 管理Pod,適用於無狀態部署,Pod Name為無序命名 ![](https://i.imgur.com/Sbz0FBt.png) ---- ##### Deployment YAML ``` apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: load-balancer-example name: hello-world spec: replicas: 5 selector: matchLabels: app.kubernetes.io/name: load-balancer-example template: metadata: labels: app.kubernetes.io/name: load-balancer-example spec: containers: - image: gcr.io/google-samples/node-hello:1.0 name: hello-world ports: - containerPort: 8080 ``` ---- #### Servcie Concepts ---- Service 為一組Pod提供一個統一的入口,並為它們提供負載均衡和自動服務發現 ![](https://i.imgur.com/0TkOMcK.png) ---- ##### Servcie YAML ``` apiVersion: v1 kind: Service metadata: name: hello-world spec: selector: app.kubernetes.io/name: load-balancer-example ports: - port: 8080 targetPort: 8080 ``` --- ## Demo ``` kubectl create deploy nginx --image=nginx:latest kubectl create svc nodeport nginx --tcp=80:80 ``` --- ## 課後動腦 * 1.K8s 最小單位是什麼? * 2.在 K8s 中 Container 是存放在哪裡? * 3.使用K8s 上執行 web 服務,並可連線到 web 服務並進行 scale * 4.Service、Deployment、Replicaset 與 Pod 之間的關係是?
{"metaMigratedAt":"2023-06-15T09:24:36.494Z","metaMigratedFrom":"YAML","title":"K8S OverView","breaks":true,"contributors":"[{\"id\":\"4f5c5dc0-df78-40b6-8b4c-d0c83c7416cb\",\"add\":291,\"del\":291},{\"id\":\"3fb4bc3a-7154-4d90-b785-69b4345d269a\",\"add\":5239,\"del\":0}]"}
Expand menu