本文已参与 新人创作礼 活动,一起开启掘金创作之路
1.K3S基础
1.1简介
官网:k3s.io/
Github地址:github.com/k3s-io/k3s
k3s 是 Rancher 推出的轻量级 k8s发行版,它针对边缘计算、物联网等场景进行了高度优化。k3s 本身包含了 k8s 的源码,而二进制包却只有 60M 但是本质上和 k8s 没有区别。但为了降低资源占用,k3s 和 k8s 还是有一些区别的,主要是:Ø使用了相比 Docker 更轻量的 containerd 作为容器运行时(Docker 并不是唯一的容器选择)Ø去掉了 k8s 的 Legacy, alpha, non-default featuresØ用 sqlite3 作为默认的存储,同时支持使用 etcd3、MySQL 和 PostgreSQL 作为存储机制。Ø其他的一些优化,最终 k3s 只是一个 binary 文件,非常易于部署Ø添加了简单但功能强大的batteries-included功能,例如:本地存储提供程序,服务负载均衡器,Helm controller 和 Traefik Ingress controller
所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。最大程度减轻了外部依赖性,k3s 仅需要 kernel 和 cgroup 挂载。K3s 软件包需要的依赖项包括:containerdFlannelCoreDNSCNI主机实用程序(iptables、socat 等)Ingress controller(Traefik)嵌入式服务负载均衡器(service load balancer)嵌入式网络策略控制器(network policy controller)
1.2适用场景
K3s适用于以下场景:
- 边缘计算-Edge
- 物联网-IoT
- CI
- Development
- ARM
- 嵌入式 K8s
由于运行 K3s 所需的资源相对较少,所以 K3s 也适用于开发和测试场景。在这些场景中,如果开发或测试人员需要对某些功能进行验证,或对某些问题进行重现,那么使用 K3s 不仅能够缩短启动集群的时间,还能够减少集群需要消耗的资源。
1.3优点
- k3s将安装Kubernetes所需的一切打包进仅有60MB大小的二进制文件中,并且完全实现了Kubernetes API。为了减少运行Kubernetes所需的内存,Rancher删除了很多不必要的驱动程序,并用附加组件对其进行替换。
- k3s是一款完全通过CNCF认证的Kubernetes发行版,这意味着你可以编写YAML来对完整版的Kubernetes进行操作,并且它们也将适用于k3s集群。
- 由于它只需要极低的资源就可以运行,因此它能够在任何512MB RAM以上的设备上运行集群,换言之,我们可以让pod在master和节点上运行。
1.4架构
单机:
高可用:
1.5端口占用情况
| PROTOCOL | PORT | SOURCE | DESCRIPTION |
|---|---|---|---|
| TCP | 6443 | K3s agent nodes | Kubernetes API Server |
| UDP | 8472 | K3s server and agent nodes | Required only for Flannel VXLAN |
| TCP | 10250 | K3s server and agent nodes | Kubelet metrics |
| TCP | 2379-2380 | K3s server nodes | Required only for HA with embedded etcd |
1.6机器配置
CLUSTER:
DB:
2.部署
2.1准备工作
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum update -y#hostnamectl set-hostname k3s-master
# setenforce 0
# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# yum install -y ntp# ntpdate ntp1.aliyun.com
# rm -rf /etc/localtime# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# curl -fsSL https://get.docker.com -o get-docker.sh
# sh get-docker.sh --mirror=Aliyun
# systemctl disable firewalld --now
# systemctl disable nm-cloud-setup.service nm-cloud-setup.timer
# reboot
2.2部署server
注意:k3s 默认将使用 containerd 作为容器环境
# export INSTALL_K3S_VERSION=v1.23.4
# export INSTALL_K3S_MIRROR=cn
# export INSTALL_K3S_EXEC="server --docker --write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16"
# curl -sfL https://get.k3s.io | sh -
2.3部署agent
# export NODE_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token)
# export INSTALL_K3S_VERSION=v1.23.4
# export INSTALL_K3S_MIRROR=cn
# export INSTALL_K3S_EXEC="--docker --write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16"
# export K3S_URL=https://myserver:6443
# export K3S_TOKEN=${NODE_TOKEN}
# curl -sfL https://get.k3s.io | sh -
2.4离线安装
1、安装docker(k3s默认容器引擎为containerd)
注意: /etc/docker/daemon.json中的cgroupdrive设置为cgroups
"exec-opts": ["native.cgroupdriver=cgroupfs"]
2、先在有网络的地方下载k3s安装脚本和二进制文件脚本:
get.k3s.io 或者wget rancher-mirror.cnrancher.com/k3s/k3s-ins…
选择对应版本的二进制文件: github.com/rancher/k3s…
3、将k3s安装脚本放在任意位置,二进制文件拷贝到目标主机的/usr/local/bin目录,并导入镜像
# cp k3s /usr/local/bin# chmod +x /usr/local/bin/k3s
# docker load -i k3s-airgap-images-amd64.tar.gz
4、添加环境变量,跳过二进制文件下载
# export INSTALL_K3S_SKIP_DOWNLOAD=true
5、在master节点运行安装脚本 这里的版本要和上面下载的二进制文件版本一致
# export INSTALL_K3S_VERSION=v1.23.4
# export INSTALL_K3S_EXEC="server --docker--write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16"# sh install_k3s.sh
# kubectl get pods -A
# kubectl get nodes
6、在所有worker节点运行安装脚本 所有worker节点 指定版本,master,还有从master获取的token
# cp k3s /usr/local/bin# chmod +x /usr/local/bin/k3s
# export INSTALL_K3S_SKIP_DOWNLOAD=true
# export INSTALL_K3S_EXEC="--docker--write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16"
# export INSTALL_K3S_VERSION=v1.23.4
# export K3S_URL=https://master_ip:6443
# export K3S_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token) //master中查看
# sh install_k3s.sh
另外k3s+containerd的安装方式(不需要安装docker):
server安装:
INSTALL_K3S_SKIP_DOWNLOAD=true
./install_k3s.sh
agent安装:
INSTALL_K3S_SKIP_DOWNLOAD=true
K3S_URL=https://master_ip:6443
K3S_TOKEN=node-token
./install_k3s.sh
2.5升级
1、脚本自动升级curl -sfL get.k3s.io | sh -默认情况下,这将升级到稳定频道中的较新版本。如果要升级到特定版本,可以运行以下命令:
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=vX.Y.Z-rc1 sh -
2、脚本升级:从发行版下载所需版本的 K3s二进制文件将下载的二进制文件复制到/usr/local/bin/k3s停止旧的 k3s 二进制文件启动新的 k3s 二进制文件
2.6卸载
Server:
/usr/local/bin/k3s-uninstall.sh
Agent:
/usr/local/bin/k3s-agent-uninstall.sh
2.7命令补全
# yum install -y bash-completion
# source /usr/share/bash-completion/bash_completion
# source <(kubectl completion bash)
# echo "source <(kubectl completion bash)" >> ~/.bashrc
3.使用
经过上述步骤你就已经拥有了一个k3s集群,接下来就可以像玩k8s一样部署你的应用了,这里简单部署一个nginx测试:
# kubectl create namespace dj
# cat nginx-deploy.yaml
---
apiVersion:apps/v1
kind:Deployment
metadata:
name:nginx-deployment
labels:
app:nginx
namespace:dj
spec:
replicas:2
selector:
matchLabels:
app:nginx
template:
metadata:
labels:
app:nginx
spec:
containers:
-name:nginx
image:nginx:1.20.0
imagePullPolicy:IfNotPresent
ports:
-containerPort:80
resources:
requests:
cpu:0.3m
memory:500Mi
limits:
cpu:0.5m
memory:1024Mi
# kubectl apply -f nginx-deploy.yaml
# cat nginx-svc.yaml
---
apiVersion:v1
kind:Service
metadata:
name:nginx-test-svc
namespace:dj
spec:
type:NodePort
selector:
app:nginx
ports:
-protocol:TCP
port:80
targetPort:80
nodePort: 30010
# kubectl apply -f nginx-svc.yaml
# kubectl get pod,svc -n dj
访问:http://IP:30010
|
以上就是关于k3s相关的一些内容了,今天就分享到这里了,后期有新的内容也会和大家及时分享,感谢阅读。如果觉得还不错的话记得点赞关注加收藏哦,哈哈~~
本人一直在从事devops运维相关工作,欢迎大家关注我的个人公众[运维小白成长之路],会不定期更新运维相关经验分享,希望能和大家一起成长~~