韩国的汽车设计网站,wordpress无法点上传图片,网站跨平台,网络安全教育知识基本概念
无状态服务 无状态服务不会在本地存储持久化数据。多个服务实例对于同一个用户请求的响应结果是完全一致的。这种多服务实例之间是没有依赖关系#xff0c;比如web应用#xff0c;在k8s控制器中动态启停无状态服务的pod并不会对其它的pod产生影响。 有状态服务 有状…基本概念
无状态服务 无状态服务不会在本地存储持久化数据。多个服务实例对于同一个用户请求的响应结果是完全一致的。这种多服务实例之间是没有依赖关系比如web应用在k8s控制器中动态启停无状态服务的pod并不会对其它的pod产生影响。 有状态服务 有状态服务需要在本地存储持久化数据典型的是分布式数据库的应用分布式节点实例之间有依赖的拓扑关系。比如主从关系。如果K8S停止分布式集群中任一实例pod就可能会导致数据丢失或者集群的crash。 Deployment控制器被设计用来管理无状态服务的pod每个pod完全一致。即
无状态服务内的多个Pod创建的顺序是没有顺序的。无状态服务内的多个Pod的名称是随机的pod被重新启动调度后它的名称与IP都会发生变化。无状态服务内的多个Pod背后是共享存储的。
开始部署无状态应用
目标
运行 Hello World 应用程序的五个实例。创建公开外部 IP 地址的服务对象。使用 Service 对象访问正在运行的应用程序。
1.编写yaml文件
vim load-balancer-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app.kubernetes.io/name: load-balancer-examplename: hello-world
spec:replicas: 5selector:matchLabels:app.kubernetes.io/name: load-balancer-exampletemplate:metadata:labels:app.kubernetes.io/name: load-balancer-examplespec:containers:- image: gcr.io/google-samples/node-hello:1.0name: hello-worldports:- containerPort: 8080可以看到yaml文件中kind的类型为Deploymentreplicas个数为5。
kubectl apply -f load-balancer-example.yaml此yaml文件由k8s官方提供因此也可以通过执行以下命令来进行部署。
kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml2.显示有关部署的信息
kubectl get deployments hello-world
kubectl describe deployments hello-world当然也可以执行 kubectl get pods查看已经部署的5个hello-world pods。 此时可以看到STATUS显示ContainerCreating。
可以执行kubectl get pod hello-world-7476585d6-4f9w8 在Events中可以看到失败的原因是拉取镜像失败。我们这边采用的镜像是gcr.io/google-samples/node-hello:1.0。k8s再拉取镜像时是通过调用Docker进行拉取。所以这时候我们可以通过docker search node-hello:1.0 先执行kubectl delete -f load-balancer-example.yaml将之前的pod删除掉。
替换yaml文件中的image
image: tomtsang/dockerlibraryk8s-node-hello 或者使用其他镜像或者采用科学手段先docker pull 下来。 READY 是当前已经创建成功的pod数量和需要创建的总数。
3.显示有关 ReplicaSet 对象的信息
kubectl get replicasets
kubectl describe replicasets4.创建一个公开部署的 Service 对象
kubectl expose deployment hello-world --typeLoadBalancer --namemy-service5.显示有关服务的信息
kubectl get services my-service由于我此处使用的是minikube因此EXTERNAL-IP 显示pending。 如果用的多节点形式。大概会输出类似
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service LoadBalancer 10.3.245.137 104.198.205.71 8080/TCP 54s6.显示有关服务的详细信息
kubectl describe services my-service
----
Name: my-service
Namespace: default
Labels: app.kubernetes.io/nameload-balancer-example
Annotations: none
Selector: app.kubernetes.io/nameload-balancer-example
Type: LoadBalancer
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.97.24.45
IPs: 10.97.24.45
Port: unset 8080/TCP
TargetPort: 8080/TCP
NodePort: unset 30386/TCP
Endpoints: 10.244.0.10:8080,10.244.1.18:8080,10.244.1.19:8080 2 more...
Session Affinity: None
External Traffic Policy: Cluster
Events: none7. 使用外部 IP 地址 ( LoadBalancer Ingress) 访问 Hello World 应用程序
NodePort: 30386/TCP
curl http://external-ip:port由于本文使用的是minikube 因此可以执行minikube service my-service 成功请求的响应是一条 hello 消息
Hello Kubernetes!
清理服务
要删除服务输入以下命令
kubectl delete services my-service要删除 Deployment、ReplicaSet 和运行 Hello World 应用程序的 Pod 输入以下命令
kubectl delete deployment hello-world走完所有的流程就完成了无状态应用的部署与删除。是不是so easy
下一篇将会介绍有状态应用的部署。