k3s安装使用

2021年4月20日 发表评论 阅读评论

K3S是SUSE rancher出的一个k8s轻量版的项目,项目地址: https://github.com/rancher/k3s 。k3s比k8s少了五,代表的意思是去掉了一些k8s臃肿的可能不太用得着的组件,精简的后的k3s二进制文件只有40M左右。如果进行离线安装的话,加上离线镜像airgap一共也不到200M,安装所需的最小内存500M就够了,可以说是一个瑞士军刀级的应用了,对于边缘网络、IOT应用比较有优势,对标华为的kubeEdge项目。k3s精简的内容如下:

过时的功能和非默认功能
Alpha 功能
内置的云提供商插件
内置的存储驱动
Docker

k3s原理图

一、安装使用

1、安装环境准备

需要先关闭下防火墙和selinxu,步骤这里就省略了,另外需要加载相关内核模块,在/etc/modules-load.d/ 目录下新建k3s.conf文件,内容如下:

ip_conntrack
br_netfilter

重启OS后生效。

2、在线安装

在线安装比较简单,只需要执行一指令,即可完成一个单节点k3s集群的安装:

 curl -sfL https://get.k3s.io | sh -

如果有新的node节点需要加入集群,执行如下指令即可:

curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

上面安装过程中,无论是master节点还是Node节点,后面可以带的参数,可以参看官方install-options 页

3、离线安装

当没有外网访问权限时,可以通过离线方式进行安装,通过github页面需要下载三个安装文件:k3s、k3s-airgap-images-amd64.tar.gz,以及安装脚本install.sh。创建镜像目录并把镜像复制到 /var/lib/rancher/k3s/agent/images/目录:

mkdir -p /var/lib/rancher/k3s/agent/images/
cp  k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/
chmod +x k3s
cp k3s /usr/local/bin/
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh

如果有多块网卡,此时也可以通过指定,给出用于集群管理的网卡名称。也可以给出可以使用的端口范围。例如:

k3s server  --flannel-iface enp0s3  --kube-apiserver-arg service-node-port-range=1-65535

默认状态下,K8S只能允许node port的端口绑定到 30000-32767 这个范围, 但是,对于简单的实验,有时需要简单的绑定到 80、443 等端口,这时就可以通过设置 apiserver 的参数来实现自定义绑定范围。

K3S_TOKEN来自于Master节点安装时,生成的token文件:/var/lib/rancher/k3s/server/node-token,所以node节点的安装为:

[root@node1 ~]# cp k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/
[root@node1 ~]# INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://192.168.1.102:6443 K3S_TOKEN=K10bc1b860845c709d9ca29a9997bb28abc9ae4baf51ae7a48e24cfa669f062f6fd::server:6985a3b11e7b4c38479ccd06ad9cf669 sh install.sh 

如果需要指定网卡和相关参数,可以使用如下指令安装:

k3s agent --flannel-iface enp0s3  --server https://centos1:6443 --token mytoken

4、使用

安装完成后,可以使用如下命令查看k3s信息:

获取机器 (node) 信息: k3s kubectl get nodes
获取pods信息: k3s kubectl get pods –all-namespaces

在/usr/local/bin/ 目录会发现,kubelet和crictl命令都是k3s的软链接。由于默认k3s没有使用docker,而是使用的containerd,而对应的对容器管理使用的是crictl命令,如果不习惯,也可以使用k3s建一个docker命令的软链接,这里的大部分指令和docker是兼容的。具体如下:

二、发布一个Nginx应用测试

新建如下两个Yaml文件,内容如下:

[root@kube-master k3sservice]# cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-cluster
  template:
    metadata:
      labels:
        app: nginx-cluster
    spec:
      containers:
      - name: nginx-cluster
        image: nginx
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 0.1
            memory: 500Mi
          limits:
            cpu: 0.3
            memory: 1024Mi
[root@kube-master k3sservice]#
[root@kube-master k3sservice]# cat nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx-cluster
  ports:
  - port: 8000
    targetPort: 80
    nodePort: 30246

使用使用kubectl create -f指令应用两个文件,使用kubectl get deployment和kubectl get svc查看状态。

[root@kube-master k3sservice]# kubectl get nodes
NAME          STATUS   ROLES                  AGE     VERSION
kube-master   Ready    control-plane,master   5d13h   v1.21.0+k3s1
kube-node1    Ready    <none>                 5d13h   v1.21.0+k3s1
[root@kube-master k3sservice]# kubectl get svc
NAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
kubernetes      ClusterIP   10.43.0.1     <none>        443/TCP          5d13h
nginx-service   NodePort    10.43.98.77   <none>        8000:30246/TCP   5d12h
[root@kube-master k3sservice]#
[root@kube-master k3sservice]# ping kube-node1
PING kube-node1 (192.168.159.133) 56(84) bytes of data.
64 bytes from kube-node1 (192.168.159.133): icmp_seq=1 ttl=64 time=0.483 ms

这时候使用http://kube-master:30246或者http://kube-node1:30246都可以正常查看到nginx的默认页面。




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Docker/k8s/etcd 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.