k3s安装使用
K3S是SUSE rancher出的一个k8s轻量版的项目,项目地址: https://github.com/rancher/k3s 。k3s比k8s少了五,代表的意思是去掉了一些k8s臃肿的可能不太用得着的组件,精简的后的k3s二进制文件只有40M左右。如果进行离线安装的话,加上离线镜像airgap一共也不到200M,安装所需的最小内存500M就够了,可以说是一个瑞士军刀级的应用了,对于边缘网络、IOT应用比较有优势,对标华为的kubeEdge项目。k3s精简的内容如下:
- 过时的功能和非默认功能
- Alpha 功能
- 内置的云提供商插件
- 内置的存储驱动
- Docker
一、安装使用
1、安装环境准备
需要先关闭下防火墙和selinxu,步骤这里就省略了,另外需要加载相关内核模块,在/etc/modules-load.d/ 目录下新建k3s.conf文件,内容如下:
1ip_conntrack
2br_netfilter
重启OS后生效。
2、在线安装
在线安装比较简单,只需要执行一指令,即可完成一个单节点k3s集群的安装:
1curl -sfL https://get.k3s.io | sh -
如果有新的node节点需要加入集群,执行如下指令即可:
1curl -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/目录:
1mkdir -p /var/lib/rancher/k3s/agent/images/
2cp k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/
3chmod +x k3s
4cp k3s /usr/local/bin/
5INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
如果有多块网卡,此时也可以通过指定,给出用于集群管理的网卡名称。也可以给出可以使用的端口范围。例如:
1k3s 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节点的安装为:
1[root@node1 ~]# cp k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/
2[root@node1 ~]# INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://192.168.1.102:6443 K3S_TOKEN=K10bc1b860845c709d9ca29a9997bb28abc9ae4baf51ae7a48e24cfa669f062f6fd::server:6985a3b11e7b4c38479ccd06ad9cf669 sh install.sh
如果需要指定网卡和相关参数,可以使用如下指令安装:
1k3s agent --flannel-iface enp0s3 --server https://centos1:6443 --token mytoken
4、使用
安装完成后,可以使用如下命令查看k3s信息:
1获取机器 (node) 信息: k3s kubectl get nodes
2获取pods信息: k3s kubectl get pods –all-namespaces
在/usr/local/bin/ 目录会发现,kubelet和crictl命令都是k3s的软链接。由于默认k3s没有使用docker,而是使用的containerd,而对应的对容器管理使用的是crictl命令,如果不习惯,也可以使用k3s建一个docker命令的软链接,这里的大部分指令和docker是兼容的。具体如下:
二、发布一个Nginx应用测试
新建如下两个Yaml文件,内容如下:
1[root@kube-master k3sservice]# cat nginx-deploy.yaml
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5 name: nginx-deploy
6spec:
7 replicas: 1
8 selector:
9 matchLabels:
10 app: nginx-cluster
11 template:
12 metadata:
13 labels:
14 app: nginx-cluster
15 spec:
16 containers:
17 - name: nginx-cluster
18 image: nginx
19 imagePullPolicy: Always
20 ports:
21 - containerPort: 80
22 resources:
23 requests:
24 cpu: 0.1
25 memory: 500Mi
26 limits:
27 cpu: 0.3
28 memory: 1024Mi
29[root@kube-master k3sservice]#
30[root@kube-master k3sservice]# cat nginx-service.yaml
31apiVersion: v1
32kind: Service
33metadata:
34 name: nginx-service
35 labels:
36 app: nginx-service
37spec:
38 type: NodePort
39 selector:
40 app: nginx-cluster
41 ports:
42 - port: 8000
43 targetPort: 80
44 nodePort: 30246
使用使用kubectl create -f指令应用两个文件,使用kubectl get deployment和kubectl get svc查看状态。
1[root@kube-master k3sservice]# kubectl get nodes
2NAME STATUS ROLES AGE VERSION
3kube-master Ready control-plane,master 5d13h v1.21.0+k3s1
4kube-node1 Ready 5d13h v1.21.0+k3s1
5[root@kube-master k3sservice]# kubectl get svc
6NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
7kubernetes ClusterIP 10.43.0.1 443/TCP 5d13h
8nginx-service NodePort 10.43.98.77 8000:30246/TCP 5d12h
9[root@kube-master k3sservice]#
10[root@kube-master k3sservice]# ping kube-node1
11PING kube-node1 (192.168.159.133) 56(84) bytes of data.
1264 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的默认页面。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/k3s-install/6569.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.