目标

在你的环境中创建一个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: 20GiaccessModes:- ReadWriteOncegcePersistentDisk:pdName: mysql-diskfsType: 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: 3306selector:app: mysqlclusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pv-claim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 20Gi
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: mysql
spec:strategy:type: Recreatetemplate:metadata:labels:app: mysqlspec:containers:- image: mysql:5.6name: mysqlenv:# Use secret in real usage- name: MYSQL_ROOT_PASSWORDvalue: passwordports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-persistent-storagemountPath: /var/lib/mysqlvolumes:- name: mysql-persistent-storagepersistentVolumeClaim:claimName: mysql-pv-claim

1. 部署YAML文件中的内容。

kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-deployment.yaml

2. 显示Deployment的信息。

kubectl describe deployment mysqlName:                 mysqlNamespace:            defaultCreationTimestamp:    Tue, 01 Nov 2016 11:18:45 -0700Labels:               app=mysqlSelector:             app=mysqlReplicas:             1 updated | 1 total | 0 available | 1 unavailableStrategyType:         RecreateMinReadySeconds:      0OldReplicaSets:       <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=mysqlNAME                   READY     STATUS    RESTARTS   AGEmysql-63082529-2z3ki   1/1       Running   0          3m

4. 检查PV。

 kubectl describe pv mysql-pvName:            mysql-pvLabels:          <none>Status:          BoundClaim:           default/mysql-pv-claimReclaim Policy:  RetainAccess Modes:    RWOCapacity:        20GiMessage:    Source:Type:        GCEPersistentDisk (a Persistent Disk resource in Google Compute Engine)PDName:      mysql-diskFSType:      ext4Partition:   0ReadOnly:    falseNo events.

5. 检查PVC。

 kubectl describe pvc mysql-pv-claimName:         mysql-pv-claimNamespace:    defaultStatus:       BoundVolume:       mysql-pvLabels:       <none>Capacity:     20GiAccess Modes: RWONo 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: false
If 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服务之“运行单实例的有状态服务”相关推荐

  1. 一个或多个音频服务未运行 win7 错误1079:此服务的账户不同于运行于同一进程上的其他服务账户...

    一个或多个音频服务未运行 win7 错误1079:此服务的账户不同于运行于同一进程上的其他服务账户 启动任务管理器:右键计算机--管理--"服务和应用程序"选项--"服务 ...

  2. 服务中没有ASP.net State service 状态服务 (ASP.NET state server)

    Windows7\8 装完后,服务中没有ASP.net状态服务 (ASP.NET state server) 没有找到具体的解决办法,有遇到同样问题的吗? 装IIS就行了,步骤是: 进入控制面板--- ...

  3. android 服务自动运行怎么办,怎么解决安卓软件服务停止后又自启?

    原标题:怎么解决安卓软件服务停止后又自启? 昨天说到安卓软件是如何做到开机启动的?怎么解决?当然流氓的软件并不单单这种,还有更流氓的我明明清理过电视了,关闭程序了结果一会之后这个软件的服务又开起了,后 ...

  4. 因为Windows防火墙服务未运行,不能正常使用

    windows10,安装播放器,提示无法安装该程序包,因为Windows防火墙服务未运行.请启用Windows防火墙服务并重 解决方法 1. win+R运行输入services.msc打开系统服务找到 ...

  5. 分布式服务框架原理与实践pdf_深度解析微服务治理的技术演进和架构实践

    为什么需要服务治理? 第一.业务需求 随着业务的发展,服务越来越多,如何协调线上运行的各个服务,保障服务的SLA,对服务架构和运维人员是一个很大的挑战.随着业务规模的不断扩大,小服务资源浪费等问题逐渐 ...

  6. Amazon EKS 上有状态服务启用存储加密

    点击上方入口立即[自由构建 探索无限] 一起共赴年度科技盛宴! 1.背景 用户通过 Deployment, Replication Controller 可以方便地在 Kubernetes 中部署一套 ...

  7. 有状态服务和无状态服务

    概念 服务一般分为有状态服务(Stateful Service)和无状态服务(Stateless Service).它们的区别是,当请求发起后,服务在服务端运行时是否需要关联上下文. 有状态服务,服务 ...

  8. 《云计算服务安全能力要求》与《云计算服务安全指南》标准

    <信息安全技术 云计算服务安全能力要求>与<信息安全技术 云计算服务安全指南>构成了云计算服务安全管理的基础标准. <云计算服务安全指南>面向政府部门,提出了使用云 ...

  9. kubernetes实践之运行aspnetcore webapi微服务

    1.预备工作 unbuntu 16.04 or above docker for linux kubernetes for linux 集群环境 2.使用vs2017创建一个web api应用程序,并 ...

最新文章

  1. 2021年大数据Flink(三十九):​​​​​​​Table与SQL ​​​​​​总结 Flink-SQL常用算子
  2. Script标签的async和defer
  3. JAVA NIO - Buffer Channel
  4. android调用web接口,Android调用webservice 接口
  5. sql 高级 (五)(create index(创建索引) drop)
  6. C++ primer第六章6.4函数的学习 之函数的重载
  7. 监控和审计 Oracle 数据库错误
  8. 由一个网站注册验证码带来的思考
  9. TakeColor 屏幕取色器 8.0 中文绿色版
  10. c语言ut测试白盒测试方法,白盒测试
  11. 迅雷7.22 和迅雷5.9 去广告优化增强绿色版
  12. 变色龙引导安装黑苹果 遇到的问题的解决办法
  13. c语言求圆柱的底面积和体积,计算圆柱的底面积和体积
  14. 使用Github搭建一个属于自己的网站
  15. ROX-Filer 2.6
  16. KSM与KVM CPU、内存控制
  17. js前端处理过滤特殊字符以及输入法特殊表情符号emoji的正则方法,解决数据库报错问题。
  18. python课程设计计算器_Python设计实现的计算器功能完整实例
  19. python怎么画地图空间分异图_基于地形梯度的赣南地区生态系统服务价值对人为干扰的空间响应...
  20. 蒲江县实验中学计算机老师照片,上“新”!实验中学一批高能教师亮相!

热门文章

  1. 听迅雷COO程浩先生演讲有感
  2. Office 365 Developer
  3. 任务状态段TSS及TSS描述符、局部描述符表LDT及LDT描述符
  4. IDEA创院理事长沈向洋:人工智能飞速发展之下呈现三大新趋势
  5. 黄浩老师cpp平时作业(四)杨辉三角
  6. 获取ios 设备的设备标识
  7. correction of probe pressure artifacts in freehand 3D ultrasound
  8. 计算机软件系统doc,计算机的软件系统.doc
  9. Linux部署iwebshop
  10. python设计棋牌游戏_python开发棋牌类游戏