k8s是什麼?html
它是用來解決容器部署,調度,伸縮等基礎的功能的軟件node
k8s的優勢?python
docker中部署k8s架構nginx
基本概念web
##咱們先把k8s跑起來在說,部署參考:http://www.javashuo.com/article/p-dnstgdac-bs.htmldocker
=============================================================================api
部署一個應用架構
kubectl run nginx \ --image=ghd493630393/nginx:v1 \ --port=80
這裏咱們經過kubectl run部署了一個應用,命名爲kubernetes-bootcamp ,如圖1-6 所示。app
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