• k8s简化版k3s安装使用


    环境:联网环境、centos7

    1 k3s简介--5 less than K8s
    k3s[1]是rancher®开源的一个Kubernetes发行版,从名字上就可以看出k3s相对k8s做了很多裁剪和优化,二进制程序不足50MB,占用资源更少,只需要512MB内存即可运行。
    而之所以称为k3s是因为相对k8s裁剪了如下5个部分:
    • 过时的功能和非默认功能
    • Alpha功能
    • 内置的云提供商插件
    • 内置的存储驱动
    • Docker
    官方称k3s是:
    ★ k3s是史上最轻量级Kubernetes.
    相对k8s最主要的优化如下:
    • 使用内嵌轻量级数据库SQLite作为默认数据存储替代etcd,当然etcd仍然是支持的。
    • 内置了local storage provider、service load balancer、helm controller、Traefik ingress controller,开箱即用。
    • 所有Kubernetes控制平面组件如api-server、scheduler等封装成为一个精简二进制程序,控制平面只需要一个进程即可运行。
    • 删除内置插件(比如cloudprovider插件和存储插件)。
    • 减少外部依赖,操作系统只需要安装较新的内核以及支持cgroup即可,k3s安装包已经包含了containerd、Flannel、CoreDNS,非常方便地一键式安装,不需要额外安装Docker、Flannel等组件。
    k3s的四大使用场景为:
    • Edge
    • IoT
    • CI
    • ARM
    当然如果想学习k8s,而又不想折腾k8s的繁琐安装部署,完全可以使用k3s代替k8s,k3s包含了k8s的所有基础功能,而k8s附加功能其实大多数情况也用不到。
    2 一键式安装k3s
    k3s安装确实非常简单,只需要一个命令即可完成:

    curl -sfL https://get.k3s.io | sh -
    
    Complete!
    [INFO]  Creating /usr/local/bin/kubectl symlink to k3s
    [INFO]  Creating /usr/local/bin/crictl symlink to k3s
    [INFO]  Creating /usr/local/bin/ctr symlink to k3s
    [INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
    [INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
    [INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
    [INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
    [INFO]  systemd: Enabling k3s unit
    Created symlink from /etc/systemd/system/multi-user.target.wants/k3s.service to /etc/systemd/system/k3s.service.
    [INFO]  systemd: Starting k3s
    
    通过如上只执行了一个命令即部署了一套all in one k3s单节点环境,相对k8s无需额外安装如下组件:
    • kubelet
    • kube-proxy
    • Docker
    • etcd
    • ingress,如ngnix
    当然可以使用k3s agent添加更多的worker node,只需要添加K3S_URL和K3S_TOKEN参数即可,其中K3S_URL为api-server URL,而k3S_TOKEN为node注册token,保存在master节点的/var/lib/rancher/k3s/server/node-token路径。
    3 和使用k8s一样使用k3s
    3.1 和使用k8s一样使用k3s命令工具
    k3s内置了一个kubectl命令行工具,通过k3s kubectl调用,为了与k8s的kubectl命令一致,可以设置alias别名:
    # 该步骤可以省略,在/usr/local/bin中已经添加了一个kubectl软链接到k3s
    alias kubectl='k3s kubectl'
    # 配置kubectl命令补全
    source <(kubectl completion bash)
    [root@localhost ~]# tail -n 2 /etc/profile
    alias kubectl='k3s kubectl'
    source <(kubectl completion bash)
    [root@localhost ~]# source /etc/profile
    
    配置完后,我们就可以通过kubectl查看kube-system运行的pod列表如下:
    [root@localhost ~]# kubectl get pods --all-namespaces
    NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
    kube-system   coredns-854c77959c-v65bq                  1/1     Running     0          9m2s
    kube-system   metrics-server-86cbb8457f-58dtv           1/1     Running     0          9m2s
    kube-system   local-path-provisioner-5ff76fc89d-zr9w7   1/1     Running     0          9m2s
    kube-system   helm-install-traefik-4dcfr                0/1     Completed   0          9m2s
    kube-system   svclb-traefik-xdpqp                       2/2     Running     0          8m28s
    kube-system   traefik-6f9cbd9bd4-bh96w                  1/1     Running     0          8m28s
    
    我们发现并没有运行apiserver、controller-manager、scheduler、kube-proxy以及flannel等组件,因为这些都内嵌到了k3s进程。另外k3s已经给我们默认部署运行了traefik ingress、metrics-server等,不需要再额外安装了。
    k3s默认没有使用Docker作为容器运行环境,而是使用了内置的contained,可以使用crictl子命令与CRI交互。
    当然如果习惯使用docker命令行可以设置如下别名:
    alias docker='k3s crictl'
    # 配置docker命令补全
    source <(docker completion)
    complete -F _cli_bash_autocomplete docker
    #具体配置
    [root@localhost ~]# tail -n 3 /etc/profile
    alias docker='k3s crictl'
    source <(docker completion)
    complete -F _cli_bash_autocomplete docker
    [root@localhost ~]# source /etc/profile
    
    通过docker ps查看运行的容器:
    [root@localhost ~]# docker ps -a
    CONTAINER           IMAGE               CREATED             STATE               NAME                     ATTEMPT             POD ID
    d9d4c339a5960       aa764f7db3051       9 minutes ago       Running             traefik                  0                   6b361c2430c9a
    0214f1210f5dc       897ce3c5fc8ff       9 minutes ago       Running             lb-port-443              0                   06c2ce2deaba9
    ce1953ba893b5       897ce3c5fc8ff       9 minutes ago       Running             lb-port-80               0                   06c2ce2deaba9
    3195afeb29c23       3b0b04aa3473f       9 minutes ago       Exited              helm                     0                   1928fc8b40b1f
    c4570ee865459       9dd718864ce61       10 minutes ago      Running             metrics-server           0                   0b03b5fbafcff
    6bc9406727a93       148c192562719       10 minutes ago      Running             local-path-provisioner   0                   761e8ecd8d1ee
    b68bc88f5ff06       296a6d5035e2d       10 minutes ago      Running             coredns                  0                   109929bb2385c
    
    当然我们只是使用crictl模拟了docker命令,相对真正的docker我们发现多了ATTEMPT以及POD ID,这是CRI所特有的。
    3.2 和使用k8s一样创建k3s资源
    我们使用k8s最喜欢拿来入门的bootcamp作为例子,Deployment声明如下:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: kubernetes-bootcamp-v1
      name: kubernetes-bootcamp-v1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: kubernetes-bootcamp-v1
      template:
        metadata:
          labels:
            app: kubernetes-bootcamp-v1
        spec:
          containers:
          - image: jocatalin/kubernetes-bootcamp:v1
            name: kubernetes-bootcamp-v1
    
    使用kubectl apply创建Deployment资源:
    # kubectl  apply -f kubernetes-bootcamp-v1.yaml
    deployment.apps/kubernetes-bootcamp-v1 created
    # kubectl  get pod
    NAME                                     READY   STATUS        RESTARTS   AGE
    kubernetes-bootcamp-v1-c5ccf9784-m79vt   1/1     Running       0          3s
    kubernetes-bootcamp-v1-c5ccf9784-5blct   1/1     Running       0          3s
    
    创建Service:
    # kubectl apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: kubernetes-bootcamp-v1
      name: kubernetes-bootcamp-v1
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
      selector:
        app: kubernetes-bootcamp-v1
      type: ClusterIP
    # kubectl  get service
    NAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    kubernetes               ClusterIP   10.43.0.1      <none>        443/TCP    29m
    kubernetes-bootcamp-v1   ClusterIP   10.43.132.97   <none>        8080/TCP   8m14s
    # curl 10.43.132.97:8080
    Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-v1-c5ccf9784-5blct | v=1
    

      

      

      

      

      

      

    做一个决定,并不难,难的是付诸行动,并且坚持到底。
  • 相关阅读:
    《计算机网络 自顶向下方法》整理(二)应用层
    《计算机网络 自顶向下方法》整理(一)计算机网络和因特网
    《深入理解C#》整理10-使用async/await进行异步编程
    STM32 HAL库之串口详细篇
    .Net微服务实战之负载均衡(下)
    面试官:来,年轻人!请手撸5种常见限流算法!
    工具用的好,下班回家早!iTerm2使用技巧指北!
    Java编程规范(命名规则)
    Go语言快速安装手册
    Educational Codeforces Round 6 620E. New Year Tree(DFS序+线段树)
  • 原文地址:https://www.cnblogs.com/wukc/p/14788772.html
Copyright © 2020-2023  润新知