【补档】K3s 学习(三)Rancher 导入现有 K3s 集群并创建第一个容器应用
本文最后更新于 722 天前,其中的信息可能已经有所发展或是发生改变。

将 server + agent 的集群导入 Docker 安装的 Rancher 中以进行管理。


1、从面板导入现有集群
添加集群:

添加集群

导入:
导入

输入集群名词后创建:
创建

复制命令前往集群执行:
复制

我是在节点的主 server 节点执行的,执行完后返回的信息:

clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver created
clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master created
namespace/cattle-system created
serviceaccount/cattle created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-5xxdxx7 created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.apps/cattle-cluster-agent created

再回到页面上看见正在等待:

等待

在这一步我等了 10 分钟左右还没有导入成功,看了下日志:

[root@server-01 ~]# kubectl -n cattle-system logs -l app=cattle-cluster-agent -f
INFO: Environment: CATTLE_ADDRESS=10.42.2.3 CATTLE_CA_CHECKSUM= CATTLE_CLUSTER=true CATTLE_FEATURES= CATTLE_INTERNAL_ADDRESS= CATTLE_IS_RKE=false CATTLE_K8S_MANAGED=true CATTLE_NODE_NAME=cattle-cluster-agent-69b856b99c-rp874 CATTLE_SERVER=https://rancher.k3s.com
INFO: Using resolv.conf: search cattle-system.svc.cluster.local svc.cluster.local cluster.local nameserver 10.43.0.10 options ndots:5
ERROR: https://rancher.k3s.com/ping is not accessible (Could not resolve host: rancher.k3s.com) 

似乎是无法访问到域名,但是 curl 试一下:

[root@server-01 ~]# curl https://rancher.k3s.com/ping
pong

又是能访问到的,猜测可能是 DNS 出了问题,回头看下日志有这么一段:

...nameserver 10.43.0.10...

果然是 DNS 的问题,节点不知道 rancher.k3s.com 指向了哪个 IP,于是开始着手修复。
官方关于这个错误的文档:Agent 无法连接 Rancher server
在你的主节点执行:

kubectl -n cattle-system patch  deployments cattle-cluster-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                      "hostnames":
                      [
                        "rancher.k3s.com"
                      ],
                      "ip": "10.0.8.6"
                    }
                ]
            }
        }
    }
}'

再回到 Rancher 页面应该就导入成功了:

导入成功

2、创建一个容器应用
我这里选择了新建一个 Nginx 容器,也正好能测试下外网对容器内服务的访问情况。
选择命名空间:

选择命名空间

部署服务:
部署服务

填写对应的信息,这里的 Docker 镜像会默认从 hub.docker.com 下载,例如我这里填的是 nginx,那么后台会执行 docker pull nginx 这个操作。
填写对应的信息

下拉点击创建后,就可以看见这个服务因为没有容器而更新了:
更新

稍等片刻更新完成:
完成

3、容器的访问
点进刚刚创建的服务内,因为选择的是创建一个无状态服务,因此会随机在一个节点(服务器)上建立服务,这里看到是 server-02 这个节点:

服务

用 server-02 节点的公网 IP 搭配映射的 30080 端口进行访问:
成功

结束。

附加:
既然开始碰到内网 DNS 的问题,顺便说一下,一般情况下 K3s 都会在内网建立 DNS 服务器来保证各节点之间的访问,由于是练手我还是准备一步一步来,先手动确保各服务器之间的连接,总体分为两步你也可以参考:

  1. 修改 hosts,将域名和 IP 绑定,之前我是用外网做 Rancher 和集群的连接的,趁着这个机会也改到内网连接吧,集群中的每台服务器都执行:
    echo "10.0.8.6 rancher.k3s.com" >> /etc/hosts
    /etc/init.d/network restart
    ping rancher.k3s.com

    确认域名解析到 Rancher 面板所在服务器的内网地址之后此步完成。

  2. K3s 集群内部是通过 coreDNS 解析的关系,还需要在 coreDNS 中修改域名解析。
    注意:在 server 主节点修改即可,会自动同步到其他节点。

    kubectl edit configmap coredns -n kube-system

    在 NodeHosts 中新增解析:

    ...
    ...
    NodeHosts: |
        10.0.8.12 server-01
        10.0.8.17 server-02
        # 此行解析为新增的
        10.0.8.6 rancher.k3s.com
    kind: ConfigMap
    ...
    ....

    在其他节点确认修改成功:

    kubectl -n kube-system get configmap coredns -o yaml
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇