欢迎朋友加入另一个技术故事!
我对OpenShift的第一次经历是一项艰巨的任务,我对OpenShift或K8s一无所知!但是我负责将资源从集群迁移到彼此! (两次!)
但是我在中间学到了很多东西,所以让我们看看其中的一些。
在深入潜水之前,您可能会想知道什么是OpenShift,为什么我每次都将其名字放在K8S旁边,实际上是因为OpenShift构建在K8的顶部,并且有点相同(+几个功能),所以Don担心差异。
所以有什么问题?
正如我之前告诉您的,我必须将诸如应用程序(PODS+Services+路线),数据库(+其数据)等资源从OKD3 cluster(OKD3 cluster)(OKD4 cluster(OpenShift的不同版本)
)移动。这种迁移的原因?我不知道!
老实说,这已经决定,并且在董事会上,
同样在某些公司中,Kubernetes有两个方面,云方和开发人员方面,我们(开发人员)不午餐Kubernetes,而是我们在这里午餐。
我从哪里开始的?
我在Stackoverflow上问了两个问题,因为首先对我来说还不清楚该怎么办,并且有很多建议,我只是提到:
注意:不幸的是,我无法提供有关问题的链接,尽管他们受到了好评,但主持人删除了它们ðä
我还找到并提供了我的答案,我遵循了它,我认为这教会了我很多东西,而且没有错,但是对于这种情况而言,它的解决方案还不够好。
解决方案不够好!
要在K8S集群中制作资源,您应该谨慎对待其优先级,
首先要制作的是秘密和配置地图,因为它们不依赖任何东西,但一切都可以取决于它们!
最后一件事是路线,猜猜为什么?因为它们取决于服务,但没有任何取决于它们!
因此,优先级是:
- 秘密和configmaps
- 状态
- 部署
- 服务
- 路线
您可能不需要直接移动POD,因为它们通常是由其他资源(例如
)制造和控制的
部署或状态群体。
遵循的步骤:
- 登录到第一个集群:
oc login --token="your-token-for-first-server" --server="your-first-server"
- 导出您的资源:
oc get -o yaml cm > configmaps.yaml
oc get -o yaml secrets > secrets.yaml
...
也有一些默认的configmaps和秘密您不需要复制,您可以从生成的yaml文件中删除它们。
- 登录到第二个集群:
oc login --token="your-token-for-second-server" --server="your-second-server"
如果您忘记了此步骤,则可能会遇到一个说明resource already exists
的错误,但请注意不要忘记此步骤。
- 将资源加载到第二个集群
oc create -f configmaps.yaml
oc create -f secrets.yaml
...
更好的解决方案
有一个更好的解决方案,我们可以使用Templates并为不同的群集,环境或名称空间进行处理。
此外,将它们与CI/CD管道结合使用,可以通过更改一些变量来帮助我们移动资源!
Helm效果更好!我个人更喜欢掌舵而不是基本模板。
我改善了我们的CI/CD管道和掌舵(使用的掌舵)我们的应用程序,以更轻松,清洁和无缝部署。
那DB呢?
db也是这里的另一个重要且长期的讨论,但数据库应用程序本身不是我们可以轻松创建的,但是我们该如何处理数据?数据就是一切!
在我的情况下,它们是两种情况:
- 生产
- 阶段(测试环境 - 伪造数据生产)
在生产中,我们拥有一个由DBA团队控制和拥有的托管数据库,我们只有URL可以访问它,这已经足够了。
因此,在您访问外部数据库中的数据(从集群之外)中,您不需要任何额外的工作。
但是,在舞台上,我们的数据存储在由状态填充控制的POD上的PVC中。
注意:我们有mysql,您可能还有其他东西,但是这个家伙几乎是一样的。
遵循的步骤:
步骤1:登录和波特向前
登录第一个OpenShift群集:
oc login --token=<YOUR-TOKEN> --server=<YOUR-SERVER>
列出所有POD,然后选择您的DB POD(如果复制,请选择Master(0))并复制它:
oc get pods
对您本地计算机进行端口范围:
oc port-forward <MYSQL-POD-NAME> <desired-local-port>:<mysql-on-server-port>
因此,您的服务器数据库现在(喜欢)您的本地数据库!并且您在服务器上想要的任何更改都可以在localhost
上完成。
对于所有数据库和应用程序,此方法都是相同的。
步骤2:工具
安装mysql
命令行工具(如果安装了它们,请跳过此步骤)。
具体来说,我们需要mysqldump
和mysql
命令。
这样做,在MacOS运行中:
brew install mysql-client
我需要将它们添加到路径(通常是自动发生的),在下面运行命令,然后将/opt/homebrew/opt/mysql-client/bin
添加到文件末尾:
sudo nano /etc/paths
可以使用其他编辑器,例如VSCODE(type in terminal中的code
)代替纳米。
步骤3:垃圾场
mysqldump --column-statistics=0 --no-create-info -P <local-port> -h 127.0.0.1 -u <YOUR-USERNAME> -p "YOUR-DATABASE-NAME" > file_name.sql
然后,要求您输入数据库密码。
就我而言,我以前运行了迁移脚本,所以我不希望我的转储包含CREATE TABLE...
查询,所以我添加了--no-create-info
参数,但是您可能需要删除它。
另外,我正在面对Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
错误,所以我添加了--column-statistics=0
参数。
有关更多信息,请阅读here和here。
关于主机IP,请勿使用localhost
,它可能是按套接字连接的,而不是端口。
步骤4:加载转储
现在,登录到第二个群集,制作状态满集,并如前所述,端口向前其数据库,
(您可以在此类似于本地的数据库上运行迁移脚本,并且也将在集群上完成)
然后,将转储带有以下命令:
mysql -P <local-port> -h 127.0.0.1 -u <YOUR-USERNAME> -p -f "YOUR-DATABASE-NAME" < file_name.sql
就我而言,我有一些不重要的错误,我通过了-f
参数来跳过它们,但是在使用此参数时要小心,因为它迫使数据库遵循您在file_name.sql
上定义的简介。
结论
TechStories是我真正的工作经历,因为它们包含了许多信息和其他文章的链接,因此它们可能会令人困惑,这就是我的意思!我们(开发人员)不以人们在通常的文章和教程中看到的方式工作,因此我想在教授许多不同的技巧旁边分享我的知识。
我希望你喜欢! ð¥³ð¼