k3s 离线集群配置

490 阅读3分钟

本文介绍k3s的离线方式安装,用于快速部署集群,版本号v1.21.5+k3s2 一、基本环境准备

#禁用**iptables**和**firewalld**服务

#关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld
#关闭iptables服务
systemctl stop iptables
systemctl disable iptables

# 关闭 swap 
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

#禁用**selinux**
sed -i 's/enforcing/disabled/' /etc/selinux/config

# 生效命令
sysctl --system 

二、docker环境准备

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum list docker-ce --showduplicates | sort -r 
#安装指定版本 
yum install docker-ce-20.10.7

# 添加阿里云 yum 源, 可从阿里云容器镜像管理中复制镜像加速地址
cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
EOF

#启动docker
systemctl enable docker && systemctl start docker

k3s源文件准备

[root@localhost ~]# uname -a
Linux k3s-master 3.10.0-1160.42.2.el7.x86_64 #1 SMP Tue Sep 7 14:49:57 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

image.png k3s安装

  • 复制文件到k3s二进制文件到/usr/local/bin
  • /usr/local/bin下载安装脚本 wget https://get.k3s.io -O k3s-install.sh
  • 赋予执行权限
[root@localhost bin]# pwd
/usr/local/bin
[root@localhost bin]# ls
k3s  k3s-install.sh
[root@localhost bin]# chmod -R 755 *
  • docker镜像导入 docker load -i k3s-airgap-images-amd64.tar.gz

  • master节点开始安装

INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_VERSION="v1.21.5+k3s2" INSTALL_K3S_EXEC="server --docker --node-name k3s-master --tls-san 192.168.137.200 --node-ip 192.168.137.200 --node-external-ip 192.168.137.200" ./k3s-install.sh
  • kubectl命令使用配置
#编辑/etc/profile文件添加如下内容
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
#让配置生效
source /etc/profile
#接下来就可以愉快使用kubectl命令啦

安装成功显示如下

[root@localhost bin]# kubectl get node
NAME         STATUS   ROLES                  AGE    VERSION
k3s-master   Ready    control-plane,master   109s   v1.21.5+k3s2
  • node节点开始安装

注意:子节点安装也需要执行镜像和那些安装脚本步骤

INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC="--docker --node-name k3s-node01 --node-ip 192.168.137.140 --node-external-ip 192.168.137.140" K3S_URL=https://192.168.137.200:6443 K3S_TOKEN=K103b3c4ba43ed57c42164e7b014e2cf74df3c6ad1f0fadf12abab68bccf27d84d0::server:c4645ae3fd4995a18aa781928b54b14c ./k3s-install.sh
  • 安装成功后

image.png

案例

该案例以nginx为模板,使用traefik访问

  • 创建k8s-nginx.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: k8s-nginx
---
apiVersion: v1
kind: Service
metadata:
  name: k8s-nginx-demo-service
  namespace: k8s-nginx
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    app: k8s-nginx-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-nginx-demo
  namespace: k8s-nginx
spec:
  selector:
    matchLabels:
      app: k8s-nginx-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: k8s-nginx-demo
    spec:
      containers:
        - name: k8s-nginx-demo
          image: nginx:latest
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
            timeoutSeconds: 1
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
            timeoutSeconds: 1
  • 创建k8s-nginx-traefik.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: k8s-springboot-demo-ingress
  namespace: k8s-springboot
spec:
  entryPoints:
    - web
  routes:
    - match: PathPrefix(`/a`)
      kind: Rule
      services:
        - name: k8s-springboot-demo-service
          port: 80
      middlewares:
        - name: a-stripprefix
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: a-stripprefix
  namespace: k8s-springboot
spec:
  stripPrefix:
    prefixes:
      - /a
  • 部署该应用
kubectl apply -f k8s-nginx.yaml
kubectl apply -f k8s-nginx-traefik.yaml

image.png

image.png

其他常用命令

节点标签管理

  • 增加worker节点标签
kubectl label nodes k3s-node01 node-role.kubernetes.io/worker=worker
  • 删除worker节点标签
kubectl label nodes k3s-node01 node-role.kubernetes.io/worker-
  • 设置节点不可调度
k3s kubectl cordon k3s-node01
  • 取消不可调度
k3s kubectl uncordon k3s-node01
  • 驱逐已经运行的业务容器
k3s kubectl drain --ignore-daemonsets --delete-local-data k3s-node01
  • 删除node 节点
k3s kubectl delete node k3s-node01