zoukankan      html  css  js  c++  java
  • k3s安装与部署

    k3s安装与部署

    一、k3s介绍

    1.1、什么是k3s

    中文网站:http://docs.rancher.cn/docs/k3s/quick-start/_index/

    k3s是经过CNCF认证的由Rancher公司开发维护的一个轻量级的 Kubernetes 发行版,内核机制还是和 k8s 一样,但是剔除了很多外部依赖以及 K8s 的 alpha、beta 特性,同时改变了部署方式和运行方式,目的是轻量化 K8s,简单来说,K3s 就是阉割版 K8s,消耗资源极少。它主要用于边缘计算、物联网等场景。K3s 具有以下特点:

    1)安装简单,占用资源少,只需要512M内存就可以运行起来;
    2)apiserver 、schedule 等组件全部简化,并以进程的形式运行在节点上,把程序都打包为单个二进制文件,每个程序只需要占用100M内存;
    3)使用基于sqlite3的轻量级存储后端作为默认存储机制。同时支持使用etcd3、MySQL 和PostgreSQL作为存储机制;
    4)默认使用 local-path-provisioner 提供本地存储卷;
    5)默认安装了Helm controllerTraefik Ingress controller
    6)所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
    7)减少外部依赖,操作系统只需要安装较新的内核(centos7.6就可以,不需要升级内核)以及支持cgroup即可,k3s安装包已经包含了containerd、Flannel、CoreDNS,非常方便地一键式安装,不需要额外安装Docker、Flannel等组件。

    1.2、边缘计算

    image-20210715093926427

    1.3、k3s架构

    1.3.1、单节点的k3s架构

    image-20210715093411379

    1)k3s server节点是运行k3s server命令的机器(裸机或者虚拟机),而k3s Agent 节点是运行k3s agent命令的机器。

    2)单点架构只有一个控制节点(在 K3s 里叫做server node,相当于 K8s 的 master node),而且K3s的数据存储使用 sqlite 并内置在了控制节点上

    3)在这种配置中,每个 agent 节点都注册到同一个 server 节点。K3s 用户可以通过调用server节点上的K3s API来操作Kubernetes资源。

    1.3.2、高可用的K3S架构

    image-20210715093724991

    虽然单节点 k3s 集群可以满足各种用例,但对于 Kubernetes control-plane 的正常运行至关重要的环境,可以在高可用配置中运行 K3s。一个高可用 K3s 集群由以下几个部分组成:

    1)K3s Server 节点:两个或者更多的server节点将为 Kubernetes API 提供服务并运行其他 control-plane 服务

    2)外部数据库:外部数据存储(与单节点 k3s 设置中使用的嵌入式 SQLite 数据存储相反)

    二、k3s部署

    2.1、环境规划

    集群角色 ip地址 安装的组件 配置
    server节点 192.168.40.180 k3s server 2C2G
    agent节点 192.168.40.181 k3s agent 2C2G

    2.2、安装步骤

    1)系统初始化

    1、配置yum源
    2、关掉防火墙
    3、关掉selinux
    4、修改内核参数
    5、关掉swap交换分区
    

    2)安装containerd

    yum install -y yum-utils
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install containerd -y
    systemctl start containerd && systemctl enable containerd
    

    3)安装k3s

    # 在k3s server上执行
    curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
    

    image-20210715102319320

    4)验证安装是否成功

    [root@k3s-server ~]# kubectl get nodes
    NAME         STATUS   ROLES                  AGE   VERSION
    k3s-server   Ready    control-plane,master   13m   v1.21.2+k3s1
    [root@k3s-server ~]# kubectl get pods -n kube-system
    NAME                                      READY   STATUS      RESTARTS   AGE
    metrics-server-86cbb8457f-bpt5v           1/1     Running     0          13m
    coredns-7448499f4d-fsvsd                  1/1     Running     0          13m
    local-path-provisioner-5ff76fc89d-xqlq9   1/1     Running     0          13m
    helm-install-traefik-crd-k5dcn            0/1     Completed   0          13m
    helm-install-traefik-lg4cs                0/1     Completed   0          13m
    svclb-traefik-nnlmh                       2/2     Running     0          7m59s
    traefik-97b44b794-qlkwx                   1/1     Running     0          8m
    [root@k3s-server ~]# kubectl get svc
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.43.0.1    <none>        443/TCP   14m
    

    5)k3s集群添加work节点

    # 提取join token
    [root@k3s-server ~]# cat /var/lib/rancher/k3s/server/node-token
    K10ea021e6e6ca43973ceeb1ec005ffe5bc4d4e1b5993914081cdc9480826dbaac1::server:ec6135f63a1e4f4447ea8fe42c6508b1
    
    # 在agent上执行
    [root@k3s-agent ~]# curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.40.180:6443 K3S_TOKEN=K10ea021e6e6ca43973ceeb1ec005ffe5bc4d4e1b5993914081cdc9480826dbaac1::server:ec6135f63a1e4f4447ea8fe42c6508b1 sh -
    

    image-20210715103149849

    # 查看
    [root@k3s-server ~]# kubectl get nodes
    NAME         STATUS   ROLES                  AGE   VERSION
    k3s-server   Ready    control-plane,master   21m   v1.21.2+k3s1
    k3s-agent    Ready    <none>                 68s   v1.21.2+k3s1
    

    三、k3s部署应用- Guestbook 留言板

    image-20210715103301208

    1)安装redis-master

    [root@k3s-server ~]# cat redis-master-deployment.yaml 
    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: redis-master
      labels:
        app: redis
    spec:
      selector:
        matchLabels:
          app: redis
          role: master
          tier: backend
      replicas: 1
      template:
        metadata:
          labels:
            app: redis
            role: master
            tier: backend
        spec:
          containers:
          - name: master
            image: kubeguide/redis-master
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 6379
            
    [root@k3s-server ~]# cat redis-master-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-master
      labels:
        app: redis
        role: master
        tier: backend
    spec:
      ports:
      - port: 6379
        targetPort: 6379
      selector:
        app: redis
        role: master
        tier: backend
        
    # 更新
    [root@k3s-server ~]# kubectl apply -f redis-master-deployment.yaml 
    [root@k3s-server ~]# kubectl apply -f redis-master-service.yaml
    

    注意:如果已经有离线镜像包,可用如下方法导入

    [root@k3s-agent ~]# ctr images import frontend.tar.gz
    [root@k3s-agent ~]# ctr images import redis-master.tar.gz
    [root@k3s-agent ~]# ctr images import redis-slave.tar.gz
    

    2)安装redis-slave

    [root@k3s-server ~]# cat redis-slave-deployment.yaml 
    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: redis-slave
      labels:
        app: redis
    spec:
      selector:
        matchLabels:
          app: redis
          role: slave
          tier: backend
      replicas: 1
      template:
        metadata:
          labels:
            app: redis
            role: slave
            tier: backend
        spec:
          containers:
          - name: slave
            image: kubeguide/guestbook-redis-slave
            imagePullPolicy: IfNotPresent
            env:
            - name: GET_HOSTS_FROM
              value: dns
            ports:
            - containerPort: 6379
    
    [root@k3s-server ~]# cat redis-slave-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-slave
      labels:
        app: redis
        role: slave
        tier: backend
    spec:
      ports:
      - port: 6379
      selector:
        app: redis
        role: slave
        tier: backend
        
    [root@k3s-server ~]# kubectl apply -f redis-slave-deployment.yaml 
    [root@k3s-server ~]# kubectl apply -f redis-slave-service.yaml
    [root@k3s-server ~]# kubectl get pods
    NAME                            READY   STATUS    RESTARTS   AGE
    redis-master-7f9c7745cf-qb8jd   1/1     Running   0          9m9s
    redis-slave-66c6dd7c96-v7d48    1/1     Running   0          114s
    

    3)创建frontend

    [root@k3s-server ~]# cat frontend-deployment.yaml 
    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: frontend
      labels:
        app: guestbook
    spec:
      selector:
        matchLabels:
          app: guestbook
          tier: frontend
      replicas: 1
      template:
        metadata:
          labels:
            app: guestbook
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: kubeguide/guestbook-php-frontend
            imagePullPolicy: IfNotPresent
            env:
            - name: GET_HOSTS_FROM
              value: dns
            ports:
            - containerPort: 80
    
    [root@k3s-server ~]# cat frontend-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: frontend
      labels:
        app: guestbook
        tier: frontend
    spec:
      type: NodePort 
      ports:
      - port: 80
        targetPort: 80
        nodePort: 30001
      selector:
        app: guestbook
        tier: frontend
        
    [root@k3s-server ~]# kubectl apply -f frontend-deployment.yaml 
    [root@k3s-server ~]# kubectl apply -f frontend-service.yaml
    [root@k3s-server ~]# kubectl get pods
    NAME                            READY   STATUS    RESTARTS   AGE
    redis-master-7f9c7745cf-qb8jd   1/1     Running   0          16m
    redis-slave-66c6dd7c96-v7d48    1/1     Running   0          9m37s
    frontend-cc6c958c7-jddl6        1/1     Running   0          2m56s
    [root@k3s-server ~]# kubectl get svc
    NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    kubernetes     ClusterIP   10.43.0.1       <none>        443/TCP        42m
    redis-master   ClusterIP   10.43.41.230    <none>        6379/TCP       17m
    redis-slave    ClusterIP   10.43.220.9     <none>        6379/TCP       9m50s
    frontend       NodePort    10.43.147.104   <none>        80:30001/TCP   6m23s
    

    image-20210715105422934

    四、k3s卸载

    # 在server节点执行如下:
    [root@k3s-server ~]# /usr/local/bin/k3s-uninstall.sh
    
    # 在agent节点执行如下:
    [root@k3s-agent ~]# /usr/local/bin/k3s-agent-uninstall.sh
    
    作者:Lawrence

    -------------------------------------------

    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    win10下的MyEclipse2017 ci7 破解教程+全套资源+失败处理(转)
    layui layer.open() 弹层开启后 Enter回车 遮罩层无限弹处理
    layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法(转)
    layui弹出层两个以上置顶弹出
    div自动获焦并将光标定位到最后
    hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
    形参与实参的区别
    linux下安装Mysql(干货!!!)解决mysql 1130问题,远程登录问题
    linux下安装Mysql(干货!!!)
    java文件上传与下载
  • 原文地址:https://www.cnblogs.com/hujinzhong/p/15014487.html
Copyright © 2011-2022 走看看