您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Kubernetes服务--简述运行单实例的有状态服务示例

2024/8/8 2:25:41发布48次查看
目标
在你的环境中创建一个pv
创建一个mysql的deployment
在集群中以dns名称的方式,将mysql暴露给其他的pod
开始之前
你需要一个kubernetes集群,一个可以连接到集群的kubectl命令行工具。如果你没有集群,你可以使用minikube来创建。
我们会创建一个pv(persistentvolume)用于数据存储。点击这里来查看pv支持的类型,该指导会使用gcepersistentdisk来演示,但其实任何的pv类型都可以正常工作。gcepersistentdisk只能在google compute engine(gce)上工作。
在你的环境中创建磁盘
在google compute engine,运行:
gcloud compute disks create --size=20gb mysql-disk
然后创建一个pv,指向刚刚创建的mysql-disk。下面是一个创建pv的配置文件,指向上面提到的gce磁盘:
apiversion: v1 kind: persistentvolume metadata:   name: mysql-pv spec:   capacity:     storage: 20gi   accessmodes:- readwriteonce   gcepersistentdisk:     pdname: mysql-disk     fstype: ext4
注意pdname: mysql-disk这一行匹配上面gce环境创建磁盘的名称。如果要在其他环境中创建pv,可以查看persistent volumes来获取详细信息。
创建pv:
kubectl create -f https://k8s.io/docs/tasks/run-application/gce-volume.yaml
部署mysql
你可以通过kubernetes deployment的方式来创建一个有状态服务,然后使用pvc(persistentvolumeclaim)来连接已经存在的pv。比如,下面的yaml文件描述了一个运行mysql并使用pvc的deployment。文件定义了一个mount到/var/lib/mysql的卷,并创建了一个需要20g卷大小的pvc。
注意:密码定义在yaml配置文件中,这是不安全的。查看kubernetes secrets获取更安全的方案。
apiversion: v1 kind: service metadata:   name: mysql spec:   ports:- port: 3306   selector:     app: mysql   clusterip: none---apiversion: v1 kind: persistentvolumeclaim metadata:   name: mysql-pv-claim spec:   accessmodes:- readwriteonce   resources:     requests:       storage: 20gi---apiversion: apps/v1beta1 kind: deployment metadata:   name: mysql spec:   strategy:     type: recreate   template:     metadata:       labels:         app: mysql     spec:       containers:      - image: mysql:5.6name: mysql         env:           # use secret in real usage- name: mysql_root_password           value: password         ports:- containerport: 3306  name: mysql         volumemounts:- name: mysql-persistent-storage           mountpath: /var/lib/mysql       volumes:      - name: mysql-persistent-storage         persistentvolumeclaim:           claimname: mysql-pv-claim
1. 部署yaml文件中的内容。
kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-deployment.yaml
2. 显示deployment的信息。
kubectl describe deployment mysql  name:                 mysql  namespace:            default  creationtimestamp:    tue, 01 nov 2016 11:18:45 -0700  labels:               app=mysql  selector:             app=mysql  replicas:             1 updated | 1 total | 0 available | 1 unavailable  strategytype:         recreate  minreadyseconds:      0  oldreplicasets:       <none>  newreplicaset:        mysql-63082529 (1/1 replicas created)  events:    firstseen    lastseen    count    from                subobjectpath    type        reason            message   ---------    --------    -----    ----                -------------    --------    ------            -------    33s          33s         1        {deployment-controller }             normal      scalingreplicaset scaled up replica set mysql-63082529 to 1
3. 显示deployment创建的pod。
kubectl get pods -l app=mysql  name                   ready     status    restarts   age  mysql-63082529-2z3ki   1/1       running   0          3m
4. 检查pv。
 kubectl describe pv mysql-pv  name:            mysql-pv  labels:          <none>  status:          bound  claim:           default/mysql-pv-claim  reclaim policy:  retain  access modes:    rwo  capacity:        20gi  message:      source:      type:        gcepersistentdisk (a persistent disk resource in google compute engine)      pdname:      mysql-disk      fstype:      ext4      partition:   0 readonly:    false  no events.
5. 检查pvc。
 kubectl describe pvc mysql-pv-claim  name:         mysql-pv-claim  namespace:    default  status:       bound  volume:       mysql-pv  labels:       <none>  capacity:     20gi  access modes: rwo  no events.
访问mysql实例
前面的yaml文件创建了一个服务,允许集群的其他pod可以访问数据库。服务选项clusterip:none使得服务的dns名直接解析为pod的ip地址。当你的服务只有一个pod,并且你不打算增加pod的数量时,这是一种最佳的使用方式。
运行一个mysql客户端来连接mysql服务:
kubectl run -it --rm --image=mysql:5.6 mysql-client -- mysql -h <pod-ip> -ppassword
上面的命令在集群中创建了一个新的pod,该pod运行了一个mysql客户端,连接着上面服务的mysql server。如果它连接成功,也就说明了这个有状态的mysql数据库成功启动和运行了。
waiting for pod default/mysql-client-274442439-zyp6i to be running, status is pending, pod ready: falseif you don't see a command prompt, try pressing enter.mysql>
更新
更新deployment的镜像或者其他部分,同样可以照例使用kubectl apply命令来完成。以下是使用有状态应用时需要注意的地方:
不要扩容该应用。该应用只针对单例应用。下面的pv只能映射给一个pod。对于集群的有状态应用,请查看statefulset文档。
在deployment的yaml配置文档中使用strategy: type: recreate。它会告诉kubernetes不要使用rolling update。因为rolling update不会工作,因此不会有多个pod同时运行。策略recreate会在使用更新配置创建一个新的pod时删除之前的pod。
删除deployment
通过名称来删除deployment对象:
kubectl delete deployment,svc mysql kubectl delete pvc mysql-pv-claim kubectl delete pv mysql-pv
另外,如果你使用的是gce disk,还需要删除对应的disk:
gcloud compute disks delete mysql-disk
文章转自:
以上就是kubernetes服务--简述运行单实例的有状态服务示例的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product