From 292220fe34d515ca3b01b146eb83cf862b460047 Mon Sep 17 00:00:00 2001 From: colben Date: Fri, 8 Sep 2023 13:22:15 +0800 Subject: [PATCH] update --- content/post/k3s-install.md | 252 +++++++++++++++++++----------------- 1 file changed, 133 insertions(+), 119 deletions(-) diff --git a/content/post/k3s-install.md b/content/post/k3s-install.md index 9c8f9a8..57d06c6 100644 --- a/content/post/k3s-install.md +++ b/content/post/k3s-install.md @@ -1,7 +1,7 @@ --- title: "RockyLinux 8.5 安装 K3S" date: 2020-06-25T14:21:00+08:00 -lastmod: 2022-08-10T15:40:00+08:00 +lastmod: 2023-09-08T12:32:00+08:00 keywords: [] tags: ["rancher", "k3s"] categories: ["container"] @@ -9,159 +9,173 @@ categories: ["container"] ## 环境 -角色 | 主机名 | 操作系统 | 软件 ----- | ---- | ---- | ---- -数据库 | - | - | docker 20.10 -k3s server | k3s-server0 | RockyLinux 8.5 | docker 20.10, k3s v1.23.9 -k3s server | k3s-server1 | RockyLinux 8.5 | docker 20.10, k3s v1.23.9 -k3s agent | k3s-agent0 | RockyLinux 8.5 | docker 20.10, k3s v1.23.9 -k3s agent | k3s-agent1 | RockyLinux 8.5 | docker 20.10, k3s v1.23.9 +角色 | 主机名 | IP | 操作系统 | 软件 +---- | ---- | ---- | ---- | ---- +镜像库 | k3s-170 | 10.0.4.170 | RockyLinux 8.5 | registry +数据库 | k3s-170 | 10.0.4.170 | RockyLinux 8.5 | mysql +负载均衡 | k3s-170 | 10.0.4.170 | RockyLinux 8.5 | nginx +k3s server | k3s-171 | 10.0.4.171 | RockyLinux 8.5 | k3s v1.27.4 +k3s server | k3s-172 | 10.0.4.172 | RockyLinux 8.5 | k3s v1.27.4 +k3s agent | k3s-173 | 10.0.4.173 | RockyLinux 8.5 | k3s v1.27.4 +k3s agent | k3s-174 | 10.0.4.174 | RockyLinux 8.5 | k3s v1.27.4 +k3s agent | k3s-175 | 10.0.4.175 | RockyLinux 8.5 | k3s v1.27.4 - **全部服务器关闭 firewalld、selinux 和 swap,设置时间同步** -- **全部 k3s 服务器(除了数据库)必须设置唯一主机名** +- **全部 k3s 服务器(除了k3s-170)必须设置唯一主机名** -## 安装数据库 -- 在数据库服务器上执行如下操作 -- 启动 docker 容器 - ```bash - docker run -d \ - --name mysql \ - -p 3306:3306 \ - -v /data/mariadb/binlog:/var/lib/mysql-bin \ - -v /data/mariadb/db:/var/lib/mysql \ - -v /data/mariadb/log:/var/log/mysql \ - harbor.colben.cn/general/mysql:8 +## 前期准备 +- 在 k3s-170 上执行如下操作 +- 安装 docker 环境,部署私有镜像库 +- 安装 mysql,用来存储 k3s server 数据 +- 安装 nginx,四层均衡负载两个 k3s server +- 下载 k3s 二进制文件和部署脚本 + +## 安装私有镜像库 +- 在 k3s-170 上执行如下操作 +- 修改 docker 配置,在 /etc/docker/daemon.json 中增加本机镜像库地址 + ```json + { + "insecure-registries": ["10.0.4.170:20080"] + } ``` +- 安装私有镜像库 registry,监听 http 20080 +- 下载镜像列表文件 + ```bash + curl -LO https://github.com/k3s-io/k3s/releases/download/v1.27.4%2Bk3s1/k3s-images.txt + ``` + +- 下载 k3s 系统镜像,推送到本机私有镜像库 + ```bash + for image in $(cat k3s-images.txt); do + docker pull $image + docker tag $image ${image/#docker.io/10.0.4.170:20080} + docker push ${image/#docker.io/10.0.4.170:20080} + done + ``` + +## 安装数据库 +- 在 k3s-170 上执行如下操作 +- 安装 mysql - 创建 k3s 数据库 ```bash - docker exec mysql mysql -e " - CREATE DATABASE k3s DEFAULT CHARSET UTF8MB4; - CREATE USER k3s@'%' IDENTIFIED BY 'Password_1234'; - GRANT ALL ON k3s.* TO k3s@'%'; - " + CREATE DATABASE k3s DEFAULT CHARSET UTF8MB4; + CREATE USER k3s@'%' IDENTIFIED BY 'K3s_1234'; + GRANT ALL ON k3s.* TO k3s@'%'; + ``` + +## 安装负载均衡器 +- 在 k3s-170 上执行如下操作 +- 安装 nginx +- 配置 stream 四层转发 + ``` + stream { + upstream k3s_servers { + server 10.0.4.171:6443; + server 10.0.4.172:6443; + } + server { + listen 6443; + proxy_pass k3s_servers; + } + } + ``` + +## 分发部署 k3s 部署文件 +- 在 k3s-170 上执行如下操作 +- 下载安装脚本(install-k3s.sh)和可执行文件(k3s) + ``` + curl -Lo install-k3s.sh get.k3s.io + curl -LO https://github.com/k3s-io/k3s/releases/download/v1.27.4%2Bk3s1/k3s + ``` + +- 把安装脚本和二进制文件分发到每台 k3s server 和 k3s agent 服务器上 + ``` + seq -f'10.0.4.%g' 171 175 | xargs -i scp k3s install-k3s.sh {}:/usr/local/bin ``` ## 安装 k3s server -- 在每台 k3s server 服务器上执行如下操作 -- 下载并安装 k3s - ```bash - cd /usr/local/bin/ - curl -LO https://github.com/k3s-io/k3s/releases/download/v1.23.9%2Bk3s1/k3s - chmod 0755 k3s - ln -s k3s kubectl +- 在每台 k3s server 上执行如下操作 +- 增加可执行权限 + ``` + cd /usr/local/bin + chmod 0755 k3s install-k3s.sh ``` -- 创建 systemd 服务文件 /etc/systemd/system/k3s-server.service,内容如下 - ```ini - [Unit] - Description=Lightweight Kubernetes - Documentation=https://k3s.io - Wants=network-online.target - After=network-online.target - - [Install] - WantedBy=multi-user.target - - [Service] - Type=notify - KillMode=process - Delegate=yes - LimitNOFILE=infinity - LimitNPROC=infinity - LimitCORE=infinity - TasksMax=infinity - TimeoutStartSec=0 - Restart=always - RestartSec=5s - SuccessExitStatus=1 - ExecStartPre=-/sbin/modprobe br_netfilter - ExecStartPre=-/sbin/modprobe overlay - ExecStart=/usr/local/bin/k3s \ - server \ - --docker \ - --token "123456" \ - --bind-address "0.0.0.0" \ - --https-listen-port "6443" \ - --cluster-cidr "10.42.0.0/16" \ - --service-cidr "10.43.0.0/16" \ - --pause-image "harbor.colben.cn/k3s/pause:3.6" \ - --disable "coredns,servicelb,traefik,local-storage,metrics-server" \ - --datastore-endpoint "mysql://k3s:Password_1234@tcp({mysql 地址}:{mysql 端口})/k3s" +- 创建私有镜像库配置文件 + ``` + mkdir -p /etc/rancher/k3s + cat >> /etc/rancher/k3s/registries.yaml <<-EOF + mirrors: + docker.io: + endpoint: + - "http://10.0.4.170:20080" + EOF ``` -- 重载 systemd 系统服务,启动 k3s-server 服务 - ```bash +- 执行安装脚本 + ``` + INSTALL_K3S_EXEC='server --prefer-bundled-bin --disable "coredns,servicelb,traefik,local-storage,metrics-server" --datastore-endpoint="mysql://k3s:K3s_1234@tcp(10.0.4.170:3306)/k3s"' \ + INSTALL_K3S_SKIP_DOWNLOAD=true \ + INSTALL_K3S_SKIP_START=true \ + K3S_TOKEN=123456 \ + install-k3s.sh + ``` + +- 修改 /etc/systemd/system/k3s.service,**把 mysql 一行中的反斜杠(\\)全部去掉**,重载 + ``` systemctl daemon-reload - systemctl start k3s-server ``` -- 多个 k3s-server 服务可通过 keepalived 配置高可用,参考[keepalived 笔记](/post/keepalived/) +- 启动 k3s + ``` + systemctl start k3s + ``` + ## 安装 k3s agent -- 在每台 k3s agent 服务器上执行如下操作 -- 下载并安装 k3s - ```bash - cd /usr/local/bin/ - curl -LO https://github.com/k3s-io/k3s/releases/download/v1.23.9%2Bk3s1/k3s - chmod 0755 k3s +- 在每台 k3s agent 上执行如下操作 +- 增加可执行权限 + ``` + cd /usr/local/bin + chmod 0755 k3s install-k3s.sh ``` -- 创建 systemd 服务文件 /etc/systemd/system/k3s-agent.service,内容如下 - ```ini - [Unit] - Description=Lightweight Kubernetes - Documentation=https://k3s.io - Wants=network-online.target - After=network-online.target - - [Install] - WantedBy=multi-user.target - - [Service] - Type=notify - KillMode=process - Delegate=yes - LimitNOFILE=infinity - LimitNPROC=infinity - LimitCORE=infinity - TasksMax=infinity - TimeoutStartSec=0 - Restart=always - RestartSec=5s - SuccessExitStatus=1 - ExecStartPre=-/sbin/modprobe br_netfilter - ExecStartPre=-/sbin/modprobe overlay - ExecStart=/usr/local/bin/k3s \ - agent \ - --docker \ - --token "123456" \ - --server "https://{任一 server 地址或 server 高可用地址}:6443" \ - --pause-image "harbor.colben.cn/k3s/pause:3.6" \ +- 创建私有镜像库配置文件 + ``` + mkdir -p /etc/rancher/k3s + cat >> /etc/rancher/k3s/registries.yaml <<-EOF + mirrors: + docker.io: + endpoint: + - "http://10.0.4.170:20080" + EOF ``` -- 重载 systemd 系统服务,启动 k3s-agent 服务 - ```bash - systemctl daemon-reload - systemctl start k3s-agent +- 执行安装脚本 + ``` + INSTALL_K3S_EXEC='agent --prefer-bundled-bin --server "https://10.0.4.170:6443"' \ + INSTALL_K3S_SKIP_DOWNLOAD=true \ + K3S_TOKEN=123456 \ + install-k3s.sh ``` ## 常用操作 -- 查看节点信息 +- 在 k3s server 上查看节点信息 ```bash kubectl get nodes ``` -- 标记 server 节点不可调度 +- 在 k3s server 上标记 server 节点不可调度 ```bash - kubectl cordon k3s-server{0..1} + kubectl cordon k3s-{171..172} ``` -- 设置 agent 节点的角色为 worker +- 在 k3s server 上设置 agent 节点的角色为 worker ```bash - kubectl label nodes k3s-agent{0..1} kubernetes.io/role=worker --overwrite + kubectl label nodes k3s-{173..175} kubernetes.io/role=worker --overwrite ``` ## 注意事项 -- k3s 内部 ssl 证书有效期一年,可在到期前重启 k3s 集群轮换证书 +- k3s 自签名 ca 证书有效期十年,客户端和服务器证书有效期一年