1.centos 7.4 系统
2.已经安装docker,部署k8s群集
3.关闭防火墙
4.可链接外网前端
为了实如今Kubernetes集群上部署容器化应用程序。须要建立一个Kubernetes Deployment,Deployment负责建立和更新应用。建立Deployment后,Kubernetes master 会将Deployment建立好的应用实例调度到集群中的各个节点。node
应用实例建立完成后,Kubernetes Deployment Controller会持续监视这些实例。若是管理实例的节点被关闭或删除,那么 Deployment Controller将会替换它们,实现自我修复能力。nginx
“在旧的世界中” ,通常一般安装脚原本启动应用,可是便不会在机器故障后自动恢复。经过在Node节点上运行建立好的应用实例,使 Kubernetes Deployment 对应用管理提供了大相径庭的方法。docker
可参考博客 :http://www.javashuo.com/article/p-zkznnblh-ve.htmlvim
vim nginx-deployment.yml后端
kind: Deployment metadata: name: nginx-deploy spec: replicas: 1 template: metadata: labels: app: nginx-cluster spec: containers: - name: nginx-cluster image: nginx ports: - containerPort: 80 resources: requests: cpu: 1 memory: 500Mi limits: cpu: 2 memory: 1024Mi
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 1 #pod副本期待数量
template: #根据此模板建立pod的副本(实例)
metadata:
labels:
app: nginx-cluster #标签名称
spec:
containers: #pod容器的定义部分
- name: nginx-cluster #容器名称
image: nginx #容器镜像
ports:
- containerPort: 80 #容器应用监控的端口号
resources:
requests:
cpu: 1 #指定cpu数量
memory: 500Mi #指定内存数量
limits:
cpu: 2
memory: 1024Micentos
kubectl create -f nginx-deploy.yml #建立deployment
kubectl get deployment #查看deployment
kubectl get pod -o wide #查看pod状态api
Pod是有生命周期的。当一个工做节点(Node)销毁时,节点上运行的Pod也会销毁,而后经过ReplicationController动态建立新的Pods来保持应用的运行。做为另外一个例子,考虑一个图片处理 backend,它运行了3个副本,这些副本是可互换的 —— 前端不须要关心它们调用了哪一个 backend 副本。也就是说,Kubernetes集群中的每一个Pod都有一个独立的IP地址,甚至是同一个节点上的Pod,所以须要有一种方式来自动协调各个Pod之间的变化,以便应用可以持续运行。app
Enter Services。Kubernetes中的Service 是一个抽象的概念,它定义了Pod的逻辑分组和一种能够访问它们的策略,这组Pod能被Service访问,使用YAML (优先)或JSON 来定义Service,Service所针对的一组Pod一般由LabelSelector实现(参见下文,为何可能须要没有 selector 的 Service)。负载均衡
能够经过type在ServiceSpec中指定一个须要的类型的 Service,Service的四种type:
ClusterIP(默认) - 在集群中内部IP上暴露服务。此类型使Service只能从群集中访问。
NodePort - 经过每一个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动建立。经过请求 <NodeIP>:<NodePort>,能够从集群的外部访问一个 NodePort 服务。
LoadBalancer - 使用云提供商的负载均衡器(若是支持),能够向外部暴露服务。外部的负载均衡器能够路由到 NodePort 服务和 ClusterIP 服务。
ExternalName - 经过返回 CNAME 和它的值,能够将服务映射到 externalName 字段的内容,没有任何类型代理被建立。这种类型须要v1.7版本或更高版本kube-dnsc才支持。
如上图,A中Service 路由一组Pods的流量。Service容许pod在Kubernetes中被销毁并复制pod而不影响应用。相关Pod之间的发现和路由(如应用中的前端和后端组件)由Kubernetes Services处理。
Service 使用label selectors来匹配一组Pod,容许对Kubernetes中的对象进行逻辑运算,Label以key/value 键/值对附加到对象上。以多种方式使用:
指定用于开发,测试和生产的对象
嵌入版本Label
使用Label分类对象
你能够在使用
--exposekubectl 建立 Deployment 的同时建立 Service 。
vim nginx-service.yml
apiVersion: v1 kind: Service metadata: name: nginx-service labels: app: nginx-service spec: type: NodePort selector: app: nginx-cluster ports: - port: 8000 targetPort: 80 nodePort: 32500
解释以下:
apiVersion: v1 #版本号
kind: Service #代表是k8s service
metadata:
name: nginx-service #自定义service 名称
labels:
app: nginx-service #自定义标签名称
spec:
type: NodePort
selector:
app: nginx-cluster
ports:
- port: 8000
targetPort: 80 #nginx 服务默认端口号
nodePort: 32500 #客户端直接访问的端口号
kubectl create -f nginx-service.yml #建立service
kubectl get svc #查看service