侧边栏壁纸
博主头像
xuesheng博主等级

分享web知识,学习就是取悦自己!

  • 累计撰写 118 篇文章
  • 累计创建 14 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

Rancher的安装&使用Rancher搭建K8S集群&Rancher的使用

xuesheng
2022-11-25 / 0 评论 / 2 点赞 / 569 阅读 / 3,346 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-10-20,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

准备工作

系统要求

Docker 支持 64 位版本 CentOS 7/8,并且要求内核版本不低于 3.10CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。
卸载旧版本
旧版本的 Docker 称为docker或者 docker-engine,使用以下命令卸载旧版本:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

使用 yum 安装

执行以下命令安装依赖包:

sudo yum install -y yum-utils

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。
执行下面的命令添加yum软件源:

# or 国内源
sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

# or 官方源
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

如果需要测试版本的 Docker 请执行以下命令:

sudo yum-config-manager --enable docker-ce-test

安装 Docker

更新 yum 软件源缓存,并安装 docker-ce

sudo yum install docker-ce docker-ce-cli containerd.io

CentOS8 额外设置

由于 CentOS8 防火墙使用了 nftables,但 Docker 尚未支持 nftables, 我们可以使用如下设置使用 iptables

更改 /etc/firewalld/firewalld.conf

# FirewallBackend=nftables
FirewallBackend=iptables

或者执行如下命令:

firewall-cmd --permanent --zone=trusted --add-interface=docker0

firewall-cmd --reload

使用脚本自动安装

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:
若你想安装测试版的 Docker, 请从 test.docker.com 获取脚本

curl -fsSL test.docker.com -o get-docker.sh
# or
curl -fsSL get.docker.com -o get-docker.sh

sudo sh get-docker.sh --mirror Aliyun
# or
sudo sh get-docker.sh --mirror AzureChinaCloud

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。

启动 Docker


sudo systemctl enable docker

sudo systemctl start docker

建立 docker 用户组

默认情况下,docker 命令会使用 Unix socketDocker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
建立 docker 组:

sudo groupadd docker

将当前用户加入 docker 组:

sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

测试 Docker 是否安装正确

docker run --rm hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

若能正常输出以上信息,则说明安装成功。
镜像加速
如果在使用过程中发现拉取 Docker 镜像十分缓慢,可以配置 Docker 国内镜像加速。

添加内核参数

如果在 CentOS使用Docker 看到下面的这些警告信息:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

请添加内核配置参数以启用这些功能。

sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后重新加载 sysctl.conf 即可

sudo sysctl -p

参考文档

docker 官方文档

rancher 2.x(现在用的是2.7)

rancher概述(具体可查看官网)

官方地址
Rancher 是一个 Kubernetes 管理工具,让你能在任何地方和任何提供商上部署和运行集群。

Rancher 可以创建来自 Kubernetes 托管服务提供商的集群,创建节点并安装 Kubernetes,或者导入在任何地方运行的现有 Kubernetes 集群。

Rancher 基于 Kubernetes 添加了新的功能,包括统一所有集群的身份验证和 RBAC,让系统管理员从一个位置控制全部集群的访问。

此外,Rancher 可以为集群和资源提供更精细的监控和告警,将日志发送到外部提供商,并通过应用商店(Application Catalog)直接集成 Helm。如果你拥有外部 CI/CD 系统,你可以将其与 Rancher 对接。没有的话,你也可以使用 Rancher 提供的 Fleet 自动部署和升级工作负载。

Rancher 是一个 全栈式 的 Kubernetes 容器管理平台,为你提供在任何地方都能成功运行 Kubernetes 的工具。

Rancher 2.x集群销毁及卸载清理

使用docker方式安装的Rancher 2.x集群在执行完后,会在宿主机上生成一些文件。删除镜像时,在执行docker rm rancher时,不会删除生成的文件,会导致重装rancher集群不成功

  1. web控制台删除集群

可不操作,直接命令行删除容器也行

  1. 命令行清理rancher相关容器
# 停止
docker stop $(docker ps -q)

# 删除
docker rm $(docker ps -aq)

# 删除容器存储
docker volume rm $(docker volume ls -q)

  1. 卸载K8s components和secrets
for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done

  1. 清理残留文件和文件夹
rm -rf /etc/ceph \
       /etc/cni \
       /etc/kubernetes \
       /opt/cni \
       /opt/rke \
       /run/secrets/kubernetes.io \
       /run/calico \
       /run/flannel \
       /var/lib/calico \
       /var/lib/etcd \
       /var/lib/cni \
       /var/lib/kubelet \
       /var/lib/rancher/rke/log \
       /var/log/containers \
       /var/log/pods \
       /var/run/calico
  1. 重启机器
reboot

安装Rancher

初始化(可跳过)

关闭swap分区

sudo swapoff -a

验证

free -m

确保时区,时间正确

sudo timedatectl

确保虚机不会自动suspend

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

加载内核模块br_netfilter,并调整参数

加载内核模块br_netfilter,并调整参数

执行

sudo modprobe br_netfilter

确认已加载

lsmod | grep br_netfilter 

调整内核参数,修改 /etc/sysctl.conf
将桥接的IPv4流量传递到iptables的链

vim /etc/sysctl.conf

cat > /etc/sysctl.conf << EFO
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EFO

使配置生效,执行:

sudo sysctl --system

设置rp_filter的值

执行

sudo vi /etc/sysctl.d/10-network-security.conf

将文件中如下两个参数的值从2修改为1

net.ipv4.conf.default.rp_filter=1 
net.ipv4.conf.all.rp_filter=1

使配置生效,执行:

sudo sysctl --system

启动Rancher

安装稳定版的rancher,具体可查看更多Docker高级选项安装

sudo docker run -d --restart=unless-stopped --privileged --name rancher -p 80:80 -p 443:443 rancher/rancher:stable

单节点 注意
在同一个节点中运行 rancher/rancher rancher/rancher-agent
如需使用单个节点运行 Rancher 并将同一个节点添加到集群,你必须调整映射给 rancher/rancher 容器的主机端口。

如果将节点添加到集群中,节点将部署使用端口80443NGINX Ingress Controller。而这将与我们建议用于暴露 rancher/rancher 容器的默认端口冲突。

请知悉我们不建议将此设置用于生产环境,这种方式仅用来方便进行开发/演示。

如需更改主机端口映射,将-p 10000:80 -p 10443:443替换为 -p 10000:80 -p 10443:443,数据储存卷/data/rancher-data:

docker run -d --restart=unless-stopped \
  -p 10000:80 -p 10443:443 \
  -v /data/rancher-data:/var/lib/rancher \
  --privileged \
  rancher/rancher:v2.6.12

更新:这里我后期使用了2.6.13版本

在Web界面登录

地址:https:// + ip
例如:https://192.168.20.4

因为是使用https的方式登录,所以会报错。点继续前往就可以了
image-1669355806407
如果您预先设置了自己的引导密码,请在这里输入。否则会为您生成一个随机的。
docker ps找到你的容器ID,然后运行:

sudo docker logs container-id 2>&1 | grep "Bootstrap Password:"
  • container-id == 你的容器id,要替换的

执行结果,找到container-id
image-1669355588098

然后继续
image-1669356006391
填入Bootstrap Password登录后,设置密码,最少12位,然后继续

image-1669355867568

至此,Rancher安装完成!

使用Rancher搭建K8S集群

如果已经搭建k8s集群,可以选择导入已有集群。
这边我们选择创建

image-1669356313740

选择在现有的节点上使用RKE创建集群

image-1669356382524

输入集群的名称,选择k8s版本,然后根据自己的需求修改其他配置,然后点击Next

image-1669356488585
image-1669356542632

image-1669356633697

登录到节点服务器,服务器上需要装有对应版本的docker,然后执行复制的命令在主机的 SSH 终端运行。

image-1669356754269

** 此处注意,是节点服务器执行命令;

这时创建成功等待

image-1669356936731

然后在首页查看cluster的状态是否是Active,Active说明成功了。
image-1669357166021
如果出现:Cluster health check failed:

可能是服务器没有关闭防火墙

查看防火墙状态

sudo ufw status

关闭防火墙

sudo ufw disable

Rancher的使用

这边以一个web项目为例子。
Docker私库使用的是Harbor,需要将镜像上传到Harbor中。

创建命名空间

选择一个集群进去

image-1669357808699

根据自己的项目,来创建命名空间
image-1669357968015
这边可以使用YAML文件创建,也可以在页面直接输入创建。
image-1669358004264

Secret

首先创建Harbor私库的密钥
选择 存储=> Secrets =>创建

image-1669359166092

选择 仓库

image-1669359337508

命名空间选择之前自己创建的,填写名称,然后选择 Custom,仓库地址就是Harbor的地址,再输入Habor的用户名和密码。

image-1669439736805

创建 Deployment

一个 DeploymentPodReplicaSet 提供声明式的更新能力。

你负责描述 Deployment 中的 目标状态,而Deployment控制器(Controller) 以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。

以下是 Deployments 的典型用例:

  • 创建 Deployment 以将 ReplicaSet 上线。ReplicaSet 在后台创建 Pod。 检查ReplicaSet的上线状态,查看其是否成功。
  • 通过更新DeploymentPodTemplateSpec,声明 Pod 的新状态 。 新的ReplicaSet 会被创建,Deployment 以受控速率将Pod从旧ReplicaSet迁移到新 ReplicaSet。每个新的 ReplicaSet 都会更新 Deployment 的修订版本。
  • 如果 Deployment 的当前状态不稳定,回滚到较早的Deployment 版本。 每次回滚都会更新 Deployment 的修订版本。
  • 扩大Deployment规模以承担更多负载。 暂停Deployment 以应用对 PodTemplateSpec 所作的多项修改, 然后恢复其执行以启动新的上线版本。
  • 使用Deployment 状态来判定上线过程是否出现停滞。
  • 清理较旧的不再需要的 ReplicaSet 。

使用表单编辑创建Deployment

image-1669439967698####

image-1669440146073

image-1669440556633

创建一个Deployment后,还会自动创建一个Pod。
这边状态显示为Active,说明创建成功。

image-1669441130268

Pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。

Pod(就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。Pod中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的 “逻辑主机”,其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。

除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。 你也可以在集群支持临时性容器的情况下, 为调试的目的注入临时性容器。

Pod 查看log

Pod 通常不是直接创建的,而是使用工作负载资源创建的。
这边状态显示为Running,说明正在运行。
Execute Shell 可以进入Pod的容器中,相当于执行命令:kubectl exec -it podName -n namespaceName – /bin/sh
View Logs 查看日志,相当于执行命令:kubectl logs -f --tail 500 podName -n namespaceName

image-1669441235710

image-1669442843467

看到启动成功,最终结果访问 ip

image-1669442782891

2

评论区