K3s 是 Rancher 发布的经过完全认证的 Kubernetes 发行版。K3s 易于使用且更轻量,全部组件都打包在了一个二进制文件里。并且这个二进制文件小于 100 MB。
下面介绍在三台centos7服务器上快速搭建k3s kubernetes集群。
基础环境
主机 | 操作系统 | IP |
---|---|---|
rancher01 | centos7 | 10.0.2.9 |
rancher02 | centos7 | 10.0.2.78 |
rancher03 | centos7 | 10..2.211 |
安装MySQL 5.7数据库
rancher01节点安装mysql,安装方法参考:centos7安装mysql
在mysql中创建k3s数据库。
代码语言:javascript复制create database k3s;
安装并启动k3s Server集群
以root用户,在rancher01,rancher02,rancher03三个节点先后执行以mysql数据库信息、token为基本配置的k3s Server安装和启动脚本,具体如下所示:
其中,–token表示自定义token配置
–datastore-endpoint表示mysql数据库连接信息
代码语言:javascript复制curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server
--token=ABCDEFGHIJK
--datastore-endpoint="mysql://root:password@tcp(10.0.2.9:3306)/k3s"
确认 K3s 是否创建成功
代码语言:javascript复制[root@rancher01 ~]# k3s kubectl get nodes
NAME STATUS ROLES AGE VERSION
rancher02 Ready control-plane,master 2d v1.22.6 k3s1
rancher01 Ready control-plane,master 2d v1.22.6 k3s1
rancher03 Ready control-plane,master 2d v1.22.6 k3s1
保存并使用 kubeconfig 文件
在每个 Rancher Server 节点上安装 K3s 时,会在节点上/etc/rancher/k3s/k3s.yaml
位置创建一个kubeconfig
文件。该文件包含用于完全访问集群的凭据,您应该将此文件保存在安全的位置。
要使用此kubeconfig
文件,
- 安装 Kubernetes 命令行工具kubectl。
- 将文件
/etc/rancher/k3s/k3s.yaml
复制并保存到本地计算机上的~/.kube/config
文件中。 - 在这个
kubeconfig
文件中,server
参数为localhost
。您需要手动更改这个地址为负载均衡器的 DNS,并且指定端口 6443。(Kubernetes API Server 的端口为 6443,Rancher Server 的端口为 80 和 443。)以下是一个示例k3s.yaml
:
结果: 您现在可以使用kubectl
来管理您的 K3s 集群。如果您有多个 kubeconfig 文件,可以在使用kubectl
时通过传递文件路径来指定要使用的 kubeconfig 文件:
kubectl --kubeconfig ~/.kube/config/k3s.yaml get pods --all-namespaces
有关kubeconfig
文件的更多信息,请参考 K3s 集群访问或官方 Kubernetes 文档中关于使用kubeconfig
文件访问集群的部分。
Helm Chart 安装 Rancher
Rancher 使用 Kubernetes 的 Helm 软件包管理器安装。Helm Charts 为 Kubernetes YAML 清单文档提供了模板语法。
有了 Helm,我们可以创建可配置的部署,而不只是使用静态文件。
在https://github.com/helm/helm/releases中下载helm,并复制到/usr/sbin目录下
使用helm repo add
命令添加含有 Rancher Chart 的 Helm Chart 仓库。
请将命令中的<CHART_REPO>
,替换为latest
,stable
或alpha
。更多信息,请查看选择 Rancher 版本来选择最适合你的仓库。
latest
: 建议在尝试新功能时使用。stable
: 建议在生产环境中使用。(推荐)alpha
: 未来版本的实验性预览。
下面以latest为例:
代码语言:javascript复制helm repo add rancher-latest http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/latest
为 Rancher 创建 Namespace
我们需要定义一个 Kubernetes Namespace,在 Namespace 中安装由 Chart 创建的资源。这个命名空间的名称为 cattle-system
:
kubectl create namespace cattle-system
选择你的 SSL 选项
Rancher Server 默认需要 SSL/TLS 配置来保证访问的安全性。
你可以从以下三种证书来源中选择一种,证书将用来在 Rancher Server 中终止 TLS:
- Rancher 生成的 TLS 证书: 在这种情况下,你需要在集群中安装
cert-manager
。 Rancher 利用cert-manager
签发并维护证书。Rancher 将生成自己的 CA 证书,并使用该 CA 签署证书。然后cert-manager
负责管理该证书。 - Let’s Encrypt: Let’s Encrypt 选项也需要使用
cert-manager
。但是,在这种情况下,cert-manager 与 Let’s Encrypt 的特殊颁发者相结合,该颁发者执行获取 Let’s Encrypt 颁发的证书所需的所有操作(包括请求和验证)。此配置使用 HTTP 验证(HTTP-01
),因此负载均衡器必须具有可以从公网访问的公共 DNS 记录。 - 使用你已有的证书: 此选项使你可以使用自己的权威 CA 颁发的证书或自签名 CA 证书。 Rancher 将使用该证书来保护 WebSocket 和 HTTPS 流量。在这种情况下,你必须上传名称分别为
tls.crt
和tls.key
的 PEM 格式的证书以及相关的密钥。如果使用私有 CA,则还必须上传该 CA 证书。这是由于你的节点可能不信任此私有 CA。 Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。
设置 | Chart 选项 | 描述 | 是否需要 cert-manager |
---|---|---|---|
Rancher 生成的证书(默认) | ingress.tls.source=rancher | 使用 Rancher 生成的 CA 签发的自签名证书此项为默认选项 | 是 |
Let’s Encrypt | ingress.tls.source=letsEncrypt | 使用Let’s Encrypt颁发的证书 | 是 |
你已有的证书 | ingress.tls.source=secret | 使用你的自己的证书(Kubernetes 密文) | 否 |
以已有证书为例
使用 一键生成 ssl 自签名证书脚本 来快速生成符合 rancher 要求的自签名证书。
在此选项中,将使用你自己的证书来创建 Kubernetes secret,以供 Rancher 使用。
运行这个命令时,hostname
选项必须与服务器证书中的 Common Name
或 Subject Alternative Names
条目匹配,否则 Ingress controller 将无法正确配置。
尽管技术上仅需要Subject Alternative Names
中有一个条目,但是拥有一个匹配的 Common Name
可以最大程度的提高与旧版浏览器/应用程序的兼容性。
如果你想检查证书是否正确,请查看如何在服务器证书中检查 Common Name 和 Subject Alternative Names。
- 如上所述,为你的证书设置适当的
hostname
。 - 将
replicas
设置为 Rancher 部署所使用的复制数量。默认为 3;如果你的集群中少于 3 个节点,你应填写实际节点数量。 - 设置
ingress.tls.source
为secret
。 - 要安装一个特定的 Rancher 版本,使用
--version
标志,例如:--version 2.3.6
。 - 如果你安装的是 alpha 版本,Helm 要求在命令中加入
--devel
选项。
helm install rancher rancher-latest/rancher
--namespace cattle-system
--set hostname=rancher02.com
--set replicas=3
--set ingress.tls.source=secret
添加 TLS Secret(千万不要遗漏该步):现在已经部署了 Rancher,还需参考添加 TLS Secret 发布证书文件,以便 Rancher 和 ingress 控制器可以使用它们。
注意: 可以使用 一键生成 ssl 自签名证书脚本 来快速生成符合 rancher 要求的自签名证书。该脚本会自动生成本文中所需要的
tls.crt
、tls.key
和cacerts.pem
只有当我们在 cattle-system
命名空间,将自签名证书和对应密钥配置到 tls-rancher-ingress
的密文中,Kubernetes 才会为 Rancher 创建所有的对象和服务。
将服务器证书和任何所需的中间证书合并到名为 tls.crt
的文件中,将您的证书密钥拷贝到名称为 tls.key
的文件中。
例如,acme.sh在fullchain.cer
文件中提供了服务器证书和中间证书。在这种情况下,您应该将fullchain.cer
文件重命名为tls.crt
,将证书秘钥文件重命名为tls.key
。
使用 kubectl
创建 tls
类型的密文。
kubectl -n cattle-system create secret tls tls-rancher-ingress
--cert=tls.crt
--key=tls.key
提示: 如果您想要更换证书,您可以使用 kubectl -n cattle-system delete secret tls-rancher-ingress
来删除 tls-rancher-ingress
密文,之后使用上面的命令创建一个新的密文。如果您使用的是私有 CA 签发的证书,仅当新证书与当前证书是由同一个 CA 签发的,才可以替换。
网页访问rancher
初始化访问rancher时需要设置登录密码,可使用随机密码或者自定义密码。
参考文章
- 使用 RKE 安装 Kubernetes | Rancher文档
- 使用外部数据库实现高可用安装 | Rancher文档
- MySQL安装 – 从大数据到人工智能 (lrting.top)
本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://cloud.tencent.com/developer/article/1947949