This commit is contained in:
colben 2023-09-08 13:22:15 +08:00
parent 0d63a4429d
commit 292220fe34

View File

@ -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 证书有效期十年,客户端和服务器证书有效期一年