一、概述

K3s 是轻量级的 Kubernetes。K3s 易于安装,仅需要 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。

K3s 是 rancher 公司开发维护的一套 K8s 发行版。 目的是轻量化 K8s,并将其应用于 IoT 设备(比如树莓派)。 简单来说,K3s 就是精简版 K8s,消耗资源极少。

适用于以下场景:
1、边缘计算-Edge
2、物联网-IoT
3、CI:持续集成
4、开发
5、ARM 6、嵌入 K8s

二、安装K3S

1. 安装脚本

# 国内用户,加速安装
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

k3s默认使用 containerd 作为容器运行时
在这里插入图片描述
如使用docker作为运行容器需先安装docker

#安装需要的软件包,yum-util 提供 yum-config-manager 功能,另外两个是devicemapper 驱动依赖
sudo yum -y install yum-utils device-mapper-persistent-data lvm2

#设置yum源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装docker
sudo yum -y install docker-ce

systemctl enable docker
systemctl start docker

同时安装命令变为

# 加速安装,指定docker为默认容器
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --docker

2. 检查是否安装成功

kubectl get node -o wide

k3s -v

运行结果如下:

[root@00fly work]# kubectl get node -o wide
NAME    STATUS   ROLES                  AGE     VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
00fly   Ready    control-plane,master   4d20h   v1.27.4+k3s1   172.17.0.16   <none>        CentOS Linux 7 (Core)   3.10.0-1160.88.1.el7.x86_64   containerd://1.7.1-k3s1
[root@00fly work]# k3s -v
k3s version v1.27.4+k3s1 (36645e73)
go version go1.20.6
[root@00fly work]# 

三、部署web服务

单纯的Containerd没有Docker CLI,对于经常使用Docker的用户来说,一下就会感到不习惯。根据CRI规范,Kubernetes社区也定义了专门CLI工具crictl(https://github.com/kubernetes-sigs/cri-tools)。k3s中也内置了crictl,它被直接编译到k3s binary中,你在安装k3s时,会自动创建crictl的软连接。crictl具备了和Docker CLI类似的功能
除了crictl,k3s还内置了ctr(https://github.com/containerd/containerd/tree/master/cmd/ctr),ctr是containerd本身的CLI,更对容器和镜像API的基本封装。

常见命令如下:

crictl ps
crictl images
crictl pull registry.cn-shanghai.aliyuncs.com/00fly/docker-demo:0.0.1

ctr containers ls

以下是以docker作为运行容器的操作步骤·

1、编写部署yml

在/work 新建 web-all.yml文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: demo 
  name: demo
spec:
  replicas: 3 
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
      - image: registry.cn-shanghai.aliyuncs.com/00fly/docker-demo:0.0.1
        name: demo

---
apiVersion: v1
kind: Service  #该配置的类型,我们使用的是 Service 服务类型
metadata:
  name: demo-service  #该服务类型的名称
spec:
  selector:    #选中的app部署实例
    app: demo #为该Deployment设置key为app,value为nginx的标签
  ports:  #暴露的端口
  - protocol: TCP  # 走得tcp 协议
    port: 8080 #默认端口
    targetPort: 8080 #内建服务端口
    nodePort: 31080 #对外服务端口
  type: NodePort

2、执行部署

kubectl apply -f web-all.yml

运行结果如下:

[root@00fly web]# kubectl apply -f web-all.yml 
deployment.apps/demo created
service/demo-service created

我们可以通过以下命令查看

[root@00fly work]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
demo-85d88dc75b-gt9g5   1/1     Running   0          47m
demo-85d88dc75b-xhld7   1/1     Running   0          47m
[root@00fly work]# kubectl get svc
NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes     ClusterIP   10.43.0.1      <none>        443/TCP          4d21h
demo-service   NodePort    10.43.141.97   <none>        8080:31080/TCP   42m

服务外网端口为31080,访问界面如下:
在这里插入图片描述
说明部署成功!
下面我们验证k3s服务具有自管理功能。

3、验证pod自动管理

打开客户端,分别执行

kubectl get pod

watch kubectl get pod

在这里插入图片描述
在上面窗口执行

 kubectl delete  pod demo-85d88dc75b-kscgq

观察下面窗口的输出!

其他k3s/k8s功能请自行实践研究!

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐