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