How to Deploy Container MySQL Database with Persistent Volumes in Oracle Cloud

上一篇文章,提到了如何在Oracle Cloud中创建和访问Kubernetes Cluster。 接下来,这篇文章我们在这个Kubernetes Cluster中创建一个MySQL数据库,并且要使用到容器外的持久化卷来存储数据。 概念介绍 在Kubernetes的存储使用中,至少有两个概念需要了解,一个是Persistent Volumes(PV),另外一个是PersistentVolumeClaims(PVC)。我们可以这样理解,PV就像是真正的资源,就像CPU、内存一样的,只是PV是存储资源;而PVC则是任何一个容器要使用这些资源必须指定的纽带,对于容器来说,只看得到PVC。PVC在定义阶段并不会指明绑定到哪一个PV上,但是在创建之后则会由Kubernetes Controller来在有效的PV中寻找合适的绑定对象,一旦绑定,PV和PVC就形成了一对一的关系。从而,容器->PVC-PV,这样就完成了在容器中使用存储的目的。 前面说,PVC在创建之后会由Controller在有效的PV中寻找合适的绑定对象,实际上也可以在需要的时候自动创建PV然后自动绑定,这被称为Dynamic Volume Provisioning,要实现这一点,需要在Kubernetes中先定义StorageClass。StorageClass中定义了存储提供者(provisioner)还有重分配策略(reclaimPolicy)等,而provisioner实际上就是各种Kubernetes支持的存储类型,分别由各个存储厂家自己制定的,以volume plugin的方式加入到Kubernetes中,比如三大云厂商都提供了自己的存储,微软提供了Azure File和Azure Disk,AWS提供了AWS EBS,Google提供了GCE PD,另外还有其它各种存储类型,比如Ceph,Openstack Cinder,Glusterfs,ScaleIO,vSphere都有相应的provisioner。 同样Oracle Cloud也提供了自己的provisioner,并且在OKE中已经预先创建好了默认的StorageClass。 $ kubectl get StorageClass NAME PROVISIONER AGE oci (default) oracle.com/oci 4d6h $ kubectl describe StorageClass/oci Name: oci IsDefaultClass: Yes Annotations: kubectl.kubernetes.io/last-applied-configuration={“apiVersion”:”storage.k8s.io/v1beta1″,”kind”:”StorageClass”,”metadata”:{“annotations”:{“storageclass.beta.kubernetes.io/is-default-class”:”true”},”name”:”oci”,”namespace”:””},”provisioner”:”oracle.com/oci”} ,storageclass.beta.kubernetes.io/is-default-class=true Provisioner: oracle.com/oci Parameters: <none> AllowVolumeExpansion: <unset> MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: Immediate Events:…

How to Create and Access Container Cluster (Container Engine for Kubernetes) in Oracle Cloud

本文描述如何在Oracle Cloud中创建并访问容器服务。为了简单,所有的操作都是针对root compartment。 创建允许容器运行的Policy 这一步是必须的,否则不允许创建容器集群。 官方文档链接 左上角的产品菜单中:Governance and Administration -> Identity -> Policies 点击“Create Policy”之后,按照下图的样式创建Policy。 创建容器集群 官方文档链接 左上角的产品菜单中:Solutions and Platform -> Developer Services -> Container Cluster(OKE) 点击“Create Cluster”之后,页面中的元素较多,以下截图只是上半部分。 虽然元素较多,但是在测试阶段可以几乎完全使用默认值。因此直接点“Create”就好。 在容器集群中的Worker Node可以不用ssh登录(我们在后续只需要通过oci和kubectl命令来操作集群就可以),所以页面中的PUBLIC SSH KEY确实是不用输入的,而默认的Private网络类型也无需修改。 创建容器集群需要花数分钟时间,创建成功以后,在集群页面就可以看到新创建的集群的详细信息。在我的测试里,指定了Node Pool里只有2台Node,不是默认的3台,因此在列表中只显示了两台机器。 创建kubeconfig文件 官方文档链接 这一步比较繁琐。分为5个小步骤,不过官方文档中的描述很详尽。 第一步:标准的生成访问密钥的过程 mkdir ~/.oci openssl genrsa -out ~/.oci/oci_api_key.pem 2048 chmod go-rwx ~/.oci/oci_api_key.pem openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out…

How to Connect SQL Developer to Oracle Autonomous Transaction Processing (ATP)

Autonomous Transaction Processing简称为ATP,是Oracle自治数据库在云上的一种表现形式,另外一种是Autonomous Data Warehouse,简称ADW。目前这两种Oracle数据库的云服务都在最新发布的Always Free Services中,也就是只需要在Oracle Cloud网站中注册一个免费用户,就可以永久免费使用一定规格的这两种服务。 实际上Oracle云的Always Free Services中包含的不仅仅是数据库,还提供了计算资源、存储资源和网络资源。使用这一整套永久免费的云服务,搭建一套完整的企业应用是OK的,完全可以用于研发环境、测试环境,甚至是最初的产品环境。 那么具体到永久免费的数据库云服务,我们可以使用到的规格是: 1. 可以最多创建两个数据库环境,只有数据库,并不能接触到数据库在运行的主机,因为实际上只是两个PDB; 2. 每个PDB可以使用到最多1个OCPU,8GB内存,20GB存储容量; 3. 有一个额外的限制,最大的同时运行会话数不能超过20. 具体的规格描述可以参看官方文档:https://docs.cloud.oracle.com/iaas/Content/FreeTier/resourceref.htm 好了,假设我们已经创建好了一个ATP数据库。那么首先要解决的是如何连接到这个数据库中,说Oracle是全球对于数据库安全最看重的公司其实不为过,连接Oracle ATP数据库(或者ADW数据库也一样)并没有像其它云中的数据库那么简单,只要开一个防火墙端口,给一个连接串就能连接上了。 实际上用Oracle SQL Developer连接原本是最简单的,但是会有一些错误要解决。 下载最新的Oracle SQL Developer 19.2.1 在Oracle Cloud管理后台下载连接ATP需要的wallet压缩文件。Oracle Cloud的UI做的是如此之复杂,入口繁多,期望你们能顺利找到这个页面。 点击“数据库连接”之后,会出现下载页面。 点击“下载”按钮,会要求设置密码,实际上在使用SQL Developer连接数据库的时候并不需要此密码。因此可以随便设置。 下载的zip文件无需解压,将之放到任何一个合适的目录中即可。我放在了用户目录下的oracle目录中。 # Kamus @ Kamus-MacBook-Pro-2016 in ~/oracle [17:54:09] $ ls *zip Wallet_DB201909261518.zip 打开SQL Developer,新增数据库连接,在连接类型中选择Cloud Wallet。如果你的SQL Developer不是最新版本,可能不是这样的称呼,所以还是请下载使用最新版本。 如果你的机器安装的JAVA 8或者更早的版本,那么很可能会遇到这个错误。 点击错误中显示的链接地址,下载Java Cryptography Extension…