部署应用程序在k8s上
第一步:在master节点上创建一个deploymentkubectl create deployment sid-test-deploy --image=172.20.10.8:5000/sid/service1查看是否创建成功kubectl get deployments
本文的例子是在3台机器node1(master) node2(worker) node3(worker)上面部署nginx(3个副本)
一、K8s Deployments介绍及创建
简介
为了实现在Kubernetes集群上部署容器化应用程序。
需要创建一个Kubernetes Deployment,Deployment负责创建和更新应用。
创建Deployment后,Kubernetes master 会将Deployment创建好的应用实例调度到集群中的各个节点。
应用实例创建完成后,Kubernetes Deployment Controller会持续监视这些实例。
如果管理实例的节点被关闭或删除,那么 Deployment Controller将会替换它们,实现自我修复能力。
创建步骤
通过以下命令生成该yaml文档然后修改
cd /app/k8s
kubectl create deployment nginx-deployment --image=nginx:1.15.4 --dry-run -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx-deployment #标签名称
name: nginx-deployment #创建名为nginx-deployment的Deployment
spec:
replicas: 1 #pod副本期待数量
selector:
matchLabels:
app: nginx-deployment
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx-deployment
spec:
containers: #pod容器的定义部分
- image: nginx:1.15.4 #容器镜像
name: nginx #容器名称
ports:
- containerPort: 80 #容器应用监控的端口号
resources:
requests:
cpu: 1 #指定cpu数量
memory: 500Mi #指定内存数量
limits:
cpu: 2
memory: 1024Mi
resources: {}
status: {}
自己创建一个文件叫nginx-deployment.yaml 然后把这个贴进去,把副本数改成3
selector字段表示:Deployment如何查找要管理的Pods。在这种情况下只需要在Pod模板(app:nginx)中定义的标签。
注意:`matchLabels` 字段是 {key,value} 的映射。单个 {key,value}在 `matchLabels` 映射中的值等效于 `matchExpressions` 的元素,其键字段是“key”,运算符为“In”,值数组仅包含“value”。所有要求,从 `matchLabels` 和 `matchExpressions`,必须满足才能匹配。
通过运行以下命令创建Deployment
kubectl apply -f nginx-deployment.yaml
注意:将kubectl的 —record 的flag设置为 true可以在annotation中记录当前命令创建或者升级了该资源。这在未来会很有用,例如,查看在每个Deployment revision中执行了哪些命令。
检查 Deployment 是否已创建。
kubectl get deployments
查看 Pods
kubectl get pod -o wide
想查看更多信息,可以 describe 这个 Pod
kubectl describe pod nginx-deployment-8b9576df-kwkdh
二、Services介绍及创建
简介
Pod是有生命周期的。当一个工作节点(Node)销毁时,节点上运行的Pod也会销毁,然后通过ReplicationController动态创建新的Pods来保持应用的运行。
也就是说,Kubernetes集群中的每个Pod都有一个独立的IP地址,甚至是同一个节点上的Pod,因此需要有一种方式来自动协调各个Pod之间的变化,以便应用能够持续运行。
Enter Services。Kubernetes中的Service 是一个抽象的概念,它定义了Pod的逻辑分组和一种可以访问它们的策略,这组Pod能被Service访问,使用YAML (优先)或JSON 来定义Service,Service所针对的一组Pod通常由LabelSelector实现。
可以通过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才支持。
创建步骤
编写service的yml文件
cd /app/k8s
vi nginx-service.yml
apiVersion: v1
kind: Service
metadata:
name: nginx-service #自定义service 名称
labels:
app: nginx-service #自定义标签名称
spec:
type: NodePort
selector:
app: nginx-deployment
ports:
- port: 8000
targetPort: 80 #nginx 服务默认端口号
nodePort: 32500 #客户端直接访问的端口号
创建service
kubectl create -f nginx-service.yml
查看service
kubectl get svc
网页验证:
更多推荐
所有评论(0)