实用教程丨使用K3s和MySQL运行Rancher 2.4

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

实用教程丨使用K3s和MySQL运行Rancher 2.4

本文转自Rancher Labs

简 介
本文将介绍在高可用K3s Kubernetes集群上安装Rancher 2.4的过程并针对MySQL利用Microsoft Azure数据库的优势,该数据库消除了对etcd的依赖,并为我们提供了Azure在这一服务中的所有其他功能。

在本文中,你将了解到只使用Azure Cloud Shell如何部署基础架构以支持此方式。使用Cloud Shell的好处是零基础架构即可上手——仅需访问Azure门户即可。并且许多所需的CLI功能已经预先安装好,从而大大减少了完成安装所需的工作量。

你部署完成基础架构后,你将了解如何使用K3s在一个Kubernetes集群上部署Rancher 2.4。在Rancher 2.4中,我们已经添加了新的部署支持模式:在两个节点上的Rancher 2.4运行带有外部数据库的K3s。使用这一模式的好处之一是我们可以将节点视为短暂的。由于K3s支持外部MySQL数据库,因此我们可以做到这一点。

K3s是一个轻量的Kubernetes发行版,它比Rancher Kubernetes Engine(RKE)更先进,并且具有以下增强功能:

嵌入式SQLite数据库替换了etcd,成为默认的数据存储,它还支持外部数据存储,例如PostgreSQL、MySQL和etcd。(本文中我们将使用MySQL)
我们添加了简单但功能强大的“开箱即用”的功能,例如本地存储程序、服务负载均衡器、Helm controller以及Traefik controller。
所有Kubernetes控制平面组件的操作都封装在单个二进制文件和进程中。这使K3s可以自动化和管理复杂的集群操作,例如分发证书。
我们移除了in-tree云提供程序和存储插件
我们已将外部依赖性降到最低(仅需要现代内核和cgroup挂载)。K3s软件包需要依赖项,包括:Containerd、Flannel、CoreDNS和主机实用程序(iptables、socat等)
如果你是第一次尝试使用Rancher,可以考虑这种部署模式。这很有可能在之后成为部署Rancher的首选方法,提前了解总是好的——尤其是在Azure运行数据中心时。

前期准备
为了完成以下内容,你需要提前准备:

Microsoft账号:Microsoft的登录凭证。可以是你的Azure Active Directory凭据,也可以是普通的Outlook账户。
访问一个Azure订阅:可以是免费试用/随用随付/也可以是企业订阅(https://azure.microsoft.com/en-us/free/ )
访问Azure门户(https://portal.azure.com/#home )
架 构
以下图片展示了将要在Azure中创建的资源:

这两个节点将放在单个子网(subnet)中的自己的vNet上。这些将在Azure负载平衡器的前面。MySQL数据库将从外部的vNet提供,vNet由Microsoft托管。然后通过连接到子网的单个网络安全组(NSG)保护节点。

Azure Cloud Shell
我们将只使用Azure Cloud Shell来配置在Azure中的K3s上运行Rancher所需的所有元素。在门户中,单击右上角的“Azure Cloud Shell”按钮。该图标中有大于符号和下划线。

Azure网络
资源组
在Azure中,所有资源需要归属于某个资源组,所以我们得先创建资源组。我们将设置默认区域和资源组,以确保我们所有的资源都会被创建到正确的位置。

请注意:我使用eastus2作为我的区域,但你可以根据自身需要进行更改。

az group create -l eastus2 -n RancherK3sResourceGroup
az configure --defaults location=eastus2 group=RancherK3sResourceGroup
Vnet、公共IP和网络安全组(NSG)
这些命令完成后,将在资源组内部创建网络组件。其中包括带有默认子网的vNet,我们稍后将创建的两个虚拟机(VM)的两个公共IP,以及一个网络安全组(NSG)。

az network vnet create --resource-group RancherK3sResourceGroup --name RancherK3sVnet --subnet-name RancherK3sSubnet

az network public-ip create --resource-group RancherK3sResourceGroup --name RancherK3sPublicIP1 --sku standard

az network public-ip create --resource-group RancherK3sResourceGroup --name RancherK3sPublicIP2 --sku standard

az network nsg create --resource-group RancherK3sResourceGroup --name RancherK3sNSG1

az network nsg rule create -g RancherK3sResourceGroup --nsg-name RancherK3sNSG1 -n NsgRuleSSH --priority 100 \
--source-address-prefixes '' --source-port-ranges '' \
--destination-address-prefixes '*' --destination-port-ranges 22 --access Allow \
--protocol Tcp --description "Allow SSH Access to all VMS."
Azure负载均衡器
我们在两个VM上安装K3s之后,我们需要一个负载均衡器来提供弹性并防止VM故障。

首先,为负载均衡器创建一个公共IP

az network public-ip create --resource-group RancherK3sResourceGroup --name RancherLBPublicIP --sku standard
接下来,使用健康的探针(probe)创建负载均衡器

az network lb create \
--resource-group RancherK3sResourceGroup \
--name K3sLoadBalancer \
--sku standard \
--public-ip-address RancherLBPublicIP \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool

az network lb probe create \
--resource-group RancherK3sResourceGroup \
--lb-name K3sLoadBalancer \
--name myHealthProbe \
--protocol tcp \
--port 80
负载均衡器创建完成后,更新NSG。添加80和443端口,用于访问Rancher Server,再添加一个6443端口,用于访问K3s的Kubernetes API。

az network nsg rule create \
--resource-group RancherK3sResourceGroup \
--nsg-name RancherK3sNSG1 \
--name myNetworkSecurityGroupRuleHTTP \
--protocol tcp \
--direction inbound \
--source-address-prefix '*' \
--source-port-range '*' \
--destination-address-prefix '*' \
--destination-port-range 80 443 6443 \
--access allow \
--priority 200
现在以三个规则的形式添加负载均衡器配置。你需要一个用于端口80的规则和一个用于端口443的规则,以分散两个VM上Rancher Server的负载。第三条规则用于端口6443,该端口可访问在每个VM上运行的Kubernetes API。

az network lb rule create \
--resource-group RancherK3sResourceGroup \
--lb-name K3sLoadBalancer \
--name myHTTPRule \
--protocol tcp \
--frontend-port 80 \
--backend-port 80 \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool \
--probe-name myHealthProbe

az network lb rule create \
--resource-group RancherK3sResourceGroup \
--lb-name K3sLoadBalancer \
--name myHTTPSRule \
--protocol tcp \
--frontend-port 443 \
--backend-port 443 \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool \
--probe-name myHealthProbe

az network lb rule create \
--resource-group RancherK3sResourceGroup \
--lb-name K3sLoadBalancer \
--name myHTTPS6443Rule \
--protocol tcp \
--frontend-port 6443 \
--backend-port 6443 \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool \
--probe-name myHealthProbe
Azure数据库即服务(DaaS)
使用K3s作为Kubernetes发行版的好处之一是它支持etcd的替代版本,在本例中,我们将使用Azure数据库中的MySQL作为数据库。

要创建MySQL数据库,请运行以下CLI命令。

首先让我们为数据库服务器的名称创建一个变量,这样可以让运行后续命令更加容易。注意数据库服务器的名称在整个Azure必须是唯一的,否则你将会在创建时出错。

K3smysqlserver=
创建你的MySQL 服务器。如果名称不是唯一的,将显示错误。如果是,那么使用新名称更新变量,然后再次运行此命令。

az mysql server create --resource-group RancherK3sResourceGroup --name $K3smysqlserver --admin-user myadmin --admin-password Password1 --sku-name GP_Gen5_2 --version 5.7
创建防火墙规则以允许所有的Azure IP可以访问你的数据库服务器。

az mysql server firewall-rule create --resource-group RancherK3sResourceGroup --server $K3smysqlserver --name "AllowAllWindowsAzureIps" --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0
为现有的子网添加service endpoint。

az network vnet subnet update --vnet-name RancherK3sVnet --name RancherK3sSubnet --service-endpoints "Microsoft.Sql"
将vnet规则添加到数据库访问。

az mysql server vnet-rule create --server $K3smysqlserver --name MyK3sVNetRule \
-g RancherK3sResourceGroup --subnet RancherK3sSubnet --vnet-name RancherK3sVnet
为数据库通信禁用TLS

az mysql server update --resource-group RancherK3sResourceGroup --name $K3smysqlserver --ssl-enforcement Disabled
在Azure Cloud Shell中已经安装好MySQL CLI工具了。下一步是连接到MySQL服务器并创建一个数据库。

连接到新的MySQL服务器。

mysql --host $K3smysqlserver.mysql.database.azure.com --user myadmin@$K3smysqlserver -p
检查状态,确保MySQL正在运行。

status
创建一个空的数据库。

CREATE DATABASE kubernetes;

SHOW DATABASES;

exit
Azure虚拟机
接下来,我们将创建2个虚拟机并在它们上面安装K3s。

网络接口
创建所有网络元素后,我们可以为VM创建网络接口卡(NIC)。

az network nic create --resource-group RancherK3sResourceGroup --name nic1 --vnet-name RancherK3sVnet --subnet RancherK3sSubnet --network-security-group RancherK3sNSG1 --public-ip-address RancherK3sPublicIP1 --lb-name K3sLoadBalancer --lb-address-pools myBackEndPool

az network nic create --resource-group RancherK3sResourceGroup --name nic2 --vnet-name RancherK3sVnet --subnet RancherK3sSubnet --network-security-group RancherK3sNSG1 --public-ip-address RancherK3sPublicIP2 --lb-name K3sLoadBalancer --lb-address-pools myBackEndPool
创建虚拟机
要创建2个虚拟机,首先需要使用我们的cloud-init配置创建一个文本文件。这将部署Docker、添加ubuntu用户到docker组并安装K3s。

cat << EOF > cloud-init.txt

cloud-config

package_upgrade: true
packages:

  • curl

output: {all: '| tee -a /var/log/cloud-init-output.log'}
runcmd:

EOF
部署虚拟机。

az vm create \
--resource-group RancherK3sResourceGroup \
--name K3sNode1 \
--image UbuntuLTS \
--nics nic1 \
--admin-username ubuntu \
--generate-ssh-keys \
--custom-data cloud-init.txt

az vm create \
--resource-group RancherK3sResourceGroup \
--name K3sNode2 \
--image UbuntuLTS \
--nics nic2 \
--admin-username ubuntu \
--generate-ssh-keys \
--custom-data cloud-init.txt
检查Kubernetes是否正在运行
作为VM配置的一部分,K3s应该已经安装完毕。让我们连接到第一个VM并确认K3s是否正在运行。

ssh ubuntu@
两个VM应该都在节点列表上。如果第一次没有成功,那么需要给它几分钟的时间来运行cloud-init脚本。它可能需要花费一些时间来部署Docker和K3s。

sudo k3s kubectl get nodes
输出为:

ubuntu@ip-172-31-60-194:~$ sudo k3s kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-172-31-60-194 Ready master 44m v1.17.2+k3s1
ip-172-31-63-88 Ready master 6m8s v1.17.2+k3s1
测试集群Pod的健康状态:

sudo k3s kubectl get pods --all-namespaces
保存并开始使用kubeconfig文件
在连接到我们其中之一的节点的同时,我们需要获取集群的kubeconfig内容。使用以下命令将内容输出到屏幕,然后将其复制到剪贴板。

sudo cat /etc/rancher/k3s/k3s.yaml
将其粘贴到文本编辑器中,以便我们可以进行更改,然后再将其添加到我们正在处理的Azure Cloud Shell会话中。

更新server:使用负载均衡器的外部URL。你可以使用xip.io服务为你提供可解析的完全限定域名。请参见下面的屏幕截图。

例如:

https://rancher..xip.io:6443>

注意:需要将截屏中的示例替换为你的负载均衡器的公共IP。

现在,在/.kube文件夹中创建一个名为config的文件,并将更新的内容粘贴到该文件中。

首先,从node1开始解除连接。

exit
现在创建新的目录并编辑文件,粘贴到已经更新的内容中。

mkdir ~/.kube
vi ~/.kube/config
检查kubectl是否正在工作并能否与集群交互。现在Kubectl和Helm已经在Azure Cloud Shell中安装完毕。

kubectl get pods --all-namespaces
安装Rancher
添加Rancher Helm Repo

helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
创建cattle-system命名空间

kubectl create namespace cattle-system
分别安装CustomResourceDefinition资源

kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml
为cert-manager创建命名空间

kubectl create namespace cert-manager
添加Jetstack Helm代码库

helm repo add jetstack https://charts.jetstack.io
更新你的本地Helm chart代码库缓存

helm repo update
安装cert-manager Helm chart

cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v0.12.0```
检查Cert-Manager是否正在运行,确保所有的pod都正在运行。

``kubectl get pods --namespace cert-manager`
使用自签名证书安装Rancher。确保你使用Rancher Server的URL设置了主机名。在本文中,我们利用xip.io服务。在Rancher URL中使用Azure 负载均衡器的公共IP地址。

helm install rancher rancher-latest/rancher \
--namespace cattle-system \
--set hostname=rancher..xip.io

等待Rancher部署……

``kubectl -n cattle-system rollout status deploy/rancher``
三个副本全部roll out之后,请点击Rancher server deployment的URL,如下所示:



清 理
在Azure中创建资源会产生费用,因此请确保在完成操作后删除资源组。

``az group delete --name RancherK3sResourceGroup``
结 论
在本文中,我们提供了一种快速简便的方法使用Rancher对Azure中的容器化工作负载进行多集群管理。通过使用K3s,我们不仅能够非常快速地启动并运行,而且移除了etcd同时避免了在生产环境中运行它会产生的一些麻烦。通过使用Azure Cloud Shell,身份验证变得十分容易,并且可以“开箱即用”地使用我们所需的所有工具。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL Java
centos7安装mysql教程及Navicat平替软件
【8月更文挑战第17天】本教程详述CentOS 7上安装MySQL的过程。首先确保移除任何预装的MySQL组件,然后通过wget获取并安装MySQL的YUM源。可以选择安装特定版本如5.7或8.0。安装MySQL服务器后,启动服务并查找初始密码。登录MySQL后应立即更改密码,并可根据需要设置远程访问权限。此外,还推荐使用免费开源的DBeaver作为数据库管理工具,提供了安装步骤以方便管理和操作MySQL数据库。
148 3
|
23天前
|
存储 SQL 关系型数据库
【入门级教程】MySQL:从零开始的数据库之旅
本教程面向零基础用户,采用通俗易懂的语言和丰富的示例,帮助你快速掌握MySQL的基础知识和操作技巧。内容涵盖SQL语言基础(SELECT、INSERT、UPDATE、DELETE等常用语句)、使用索引提高查询效率、存储过程等。适合学生、开发者及数据库爱好者。
37 0
【入门级教程】MySQL:从零开始的数据库之旅
|
24天前
|
存储 自然语言处理 关系型数据库
mysql 8.0 日期维度表生成(可运行)
mysql 8.0 日期维度表生成(可运行)
38 2
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
24天前
|
存储 关系型数据库 MySQL
mysql 8.0 时间维度表生成(可运行)
mysql 8.0 时间维度表生成(可运行)
32 0
|
3月前
|
SQL 关系型数据库 MySQL
PHP与MySQL交互之基础教程
【8月更文挑战第31天】 在数字世界中,数据是推动一切的核心力量。本文将引导你探索PHP与MySQL的协同工作,通过实际代码示例,展示如何建立连接、执行查询以及处理结果集。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你提供宝贵的实践知识。
|
3月前
|
关系型数据库 MySQL 网络安全
MySQL主从复制详细教程
配置MySQL的主从复制是一个细致的过程,需要仔细遵循上述步骤进行。一旦配置完成并运行正常,主从复制将大大提高数据库的可用性和读写性能。在操作过程中,务必保持谨慎,确保数据的一致性和安全性。
355 0
|
4月前
|
关系型数据库 MySQL Linux
Docker安装mysql详细教程, mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘(报错已解决)
Docker安装mysql详细教程, mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory) 已解决
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
288 3
|
4月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

推荐镜像

更多
下一篇
无影云桌面