k8s是什么?
它是用來解決容器部署,調度,伸縮等基礎的功能的軟件
k8s的優點?
- 易學:輕量級,簡單,容易理解
- 便攜:支持公有雲,私有雲,混合雲,以及多種雲平台
- 可拓展:模塊化,可插拔,支持鈎子,可任意組合
- 自修復:自動重調度,自動重啟,自動復制
docker中部署k8s架構
基本概念
- 節點( Node ):一個節點是一個運行 Kubernetes 中的主機。
- 容器組( Pod ):一個 Pod 對應於由若干容器組成的一個容器組,同個組內的容器共享一個存儲卷(volume)。
- 容器組生命周期( pos-states ):包含所有容器狀態集合,包括容器組狀態類型,容器組生命周期,事件,重啟策略,以及 replication controllers。
- Replication Controllers:主要負責指定數量的 pod 在同一時間一起運行。
- 服務( services ):一個 Kubernetes 服務是容器組邏輯的高級抽象,同時也對外提供訪問容器組的策略。
- 卷( volumes ):一個卷就是一個目錄,容器對其有訪問權限。
- 標簽( labels ):標簽是用來連接一組對象的,比如容器組。標簽可以被用來組織和選擇子對象。
- 接口權限( accessing_the_api ):端口,IP 地址和代理的防火牆規則。
- web 界面( ux ):用戶可以通過 web 界面操作 Kubernetes。
- 命令行操作( cli ): kubecfg 命令
##我們先把k8s跑起來在說,部署參考:https://www.cnblogs.com/python-cat/p/10831419.html
=============================================================================
部署一個應用
kubectl run nginx \ --image=ghd493630393/nginx:v1 \ --port=80
這里我們通過kubectl run部署了一個應用,命名為kubernetes-bootcamp ,如圖1-6 所示。
Docker 鏡像通過-- image 指定。
一port 設置應用對外服務的端口。
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. deployment.apps/kubernetes-bootcamp created
這里Deployment 是Kubernetes 的術語,可以理解為應用。Kubermetes 還有一個重要術語Pod 。Pod 是容器的集合,通常會將緊密相關的一組容器放到一個Pod 中,同一個Pod 中的所有容器共享IP 地址和Port 空間,也就
是說它們在一個network namespace 中。Pod 是Kubermetes 調度的最小單位,同- Pod 中的容器始終被一起調度。通過 kubectl get pods來查看pod信息
[root@k8s-master opt]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-77d48d9dc5-kghmh 1/1 Running 0 20h
nginx-test-n828d 1/1 Running 0 5d18h
nginx-test-pmtfm 1/1 Running 0 5d18h
訪問應用
默認情況下,所有Pod 只能在集群內部訪問。對於上面這個例子,要訪問應用只能直接訪問容器的8080 端口。為了能夠從外部訪問應用,我們需要將容器的8080 端口映射到節點的端口。
#將nginx暴露到外網
[root@k8s-master ~]# kubectl expose nginx \ > --type="NodePort" \ > --port 80
#查看映射到外網的端口(可以看到外網端口是31833)
[root@k8s-master opt]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 101d
kubernetes-bootcamp NodePort 10.1.58.198 <none> 8080:30187/TCP 24h
nginx NodePort 10.1.150.252 <none> 80:31833/TCP 18h
nginx-test-n828d ClusterIP 10.1.221.205 <none> 80/TCP 5d18h
You have new mail in /var/spool/mail/root
#外網訪問的話需要通過node節點IP來訪問,查看這個svc在哪個k8s集群節點上
#kubectl describe pod nginx-77d48d9dc5-kghmh