作者:SRE运维博客
博客地址: https://www.cnsre.cn/
双十一各大云厂商纷纷撒种子种韭菜(抢用户),良心云
也是一如既往的良心,新用户更是通过某宝 148
就可以买到三年 2C4G8M
的轻量应用服务器。于是我也出售薅了羊毛入手了一台。
但是对于各种组件本身就对资源消耗比较大的 k8s
来说,跑起来还是有点费力的,于是我打算将这台实例部署一台轻量级的 Kubernetes
: k3s
k8s VS k3s
k3s 是 Rancher 推出的轻量级 k8s。k3s 本身包含了 k8s 的源码,而二进制包却只有 60M
但是本质上和 k8s 没有区别。但为了降低资源占用,k3s 和 k8s 还是有一些区别的,主要是:
- 使用了相比 Docker 更轻量的 containerd 作为容器运行时(Docker 并不是唯一的容器选择)。
- 去掉了 k8s 的 Legacy, alpha, non-default features。
- 用 sqlite3 作为默认的存储,而不是 etcd。
- 其他的一些优化,最终 k3s 只是一个 binary 文件,非常易于部署。、
所以 k3s 适用于边缘计算,IoT 等资源紧张的场景。同时 k3s 也是非常容易部署的,官网上提供了一键部署的脚本。
k3s的优点
- k3s将安装Kubernetes所需的一切打包进仅有60MB大小的二进制文件中,并且完全实现了Kubernetes API。为了减少运行Kubernetes所需的内存,Rancher删除了很多不必要的驱动程序,并用附加组件对其进行替换。
- k3s是一款完全通过CNCF认证的Kubernetes发行版,这意味着你可以编写YAML来对完整版的Kubernetes进行操作,并且它们也将适用于k3s集群。
- 由于它只需要极低的资源就可以运行,因此它能够在任何512MB RAM以上的设备上运行集群,换言之,我们可以让pod在master和节点上运行。
k3s的缺点
- 首先,当前k3s的版本(k3s v0.8.1)仅能运行单个master,这意味着如果你的master宕机,那么你就无法管理你的集群,即便已有集群要继续运行。但是在k3s v0.10的版本中,多主模式已经是实验性功能,也许在下一个版本中能够GA。
- 其次,在单个master的k3s中,默认的数据存储是SQLite,这对于小型数据库十分友好,但是如果遭受重击,那么SQLite将成为主要痛点。但是,Kubernetes控制平面中发生的更改更多是与频繁更新部署、调度Pod等有关,因此对于小型开发/测试集群而言,数据库不会造成太大负载。
结论
K8s和k3s各有优劣,使用场景也有所区别,因此不能一概而论。如果你要进行大型的集群部署,那么我建议你选择使用K8s;
如果你像我一样只是为了开发或者测试,那么选择k3s则是性价比更高的选择。
安装 k3s
确保你是一台干净的 CentOS7
服务器。
按照惯例先更新,更新前顺便把源换为国内的yum源。
# 改国内yum源
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
修改完毕后,断开重连一下。
{{< alert theme="warning" dir="ltr" >}}
️ 注意
K3s 默认将使用 containerd
作为容器环境,请在下边选择 使用Docker安装
或者使用Containerd安装
。
{{< /alert >}}
{{< tabs 使用docker安装 使用containerd安装>}}
{{< tab >}}
使用 docker 安装
# 安装 docker-ce
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
# 解决内核检查问题 重启生效
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
systemctl enable docker
systemctl start docker
# 修改 docker 源
cat << EOF > /etc/docker/daemon.json
{
"registry-mirrors":["https://3laho3y3.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
# 安装 docker 结束
# 关 firewalld 防火墙
systemctl stop firewalld
systemctl disable firewalld
# 安装 k3s
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --docker
{{< /tab >}}
{{< tab >}}
使用 containerd 安装
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
{{< /tab >}}
{{< /tabs >}}
安装完检查
安装完成后,可以执行以下命令进行主机检查。
# 运行配置检查
k3s check-config
# 查看节点状态以及 k3s 版本
[root@k3s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
vm-16-8-centos Ready control-plane,master 52m v1.21.5+k3s2
# 查看所有 pod 信息
[root@k3s-master ~]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system local-path-provisioner-5ff76fc89d-bbps4 1/1 Running 0 52m
kube-system coredns-7448499f4d-42v9x 1/1 Running 0 52m
kube-system metrics-server-86cbb8457f-xqlrg 1/1 Running 0 52m
kube-system helm-install-traefik-crd-9wk9v 0/1 Completed 0 52m
kube-system helm-install-traefik-d8llf 0/1 Completed 3 52m
kube-system svclb-traefik-jqxvf 2/2 Running 0 49m
kube-system traefik-97b44b794-wv6zv 1/1 Running 0 49m
截止到这里 k3s 已经安装完毕。
安装 nfs
安装 nfs 服务
yum -y install nfs-utils
systemctl start nfs && systemctl enable nfs
创建nfs目录
mkdir -p /home/k8s/nfs
修改权限
chmod -R 755 /home/k8s/nfs
编辑export文件
cat >>/etc/exports << EOF
/home/k8s/nfs *(rw,no_root_squash,sync)
EOF
配置生效
exportfs -r
启动rpcbind、nfs服务
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs
到这里 k3s 以及 nfs 已经安装完成,下面就可以去体验了。
如果想以上都比较麻烦,你可以用下面的一键安装脚本来执行
一键安装 k3s 脚本
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
LANG=en_US.UTF-8
RD="\033[31m" # 错误消息
GR="\033[32m" # 成功消息
YL="\033[33m" # 告警消息
BL="\033[36m" # 日志消息
PL='\033[0m'
clear
echo -e "${YL}##################################################${PL}"
echo -e "${YL}#${PL} ${GR}脚本名称${PL}: 一键安装 k3s 脚本 ${YL}#${PL}"
echo -e "${YL}#${PL} ${GR}作 者${PL}: sre运维博客 ${YL}#${PL}"
echo -e "${YL}#${PL} ${GR}网 址${PL}: https:www.cnsre.cn ${YL}#${PL}"
echo -e "${YL}#${PL} ${GR}文章地址${PL}: https://cnsre.cn/posts/211109907029/ ${YL}#${PL}"
echo -e "${YL}##################################################${PL}"
sleep 0.5
set -e
echo
echo
echo
echo -e "${RD}是否确定安装 dockerb版本的 k3s? ${PL}"
read -r -p "确定请按 y 任意键则退出!请选择:[y/n]" input
if [[ $input != "y" ]]; then
exit 1
else
echo -e "$GR正在开始安装 dockerb版本的 k3s$PL"
fi
if [ `command -v docker` ];then
echo -e "${YL}docker 已经安装,正在添加docker加速源${PL}"
else
echo -e "${GR}install docker${PL}"
curl https://download.daocloud.io/docker/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
yum -y install https://download.daocloud.io/docker/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
curl -fsSL https://get.daocloud.io/docker | bash -s docker --mirror Aliyun
fi
sudo mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"]
}
EOF
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
if [ `command -v k3s` ];then
echo -e "${YL}k3s 已经安装${PL}"
exit 1
else
export K3S_NODE_NAME=${HOSTNAME//_/-}
export INSTALL_K3S_EXEC="--docker --kube-apiserver-arg service-node-port-range=1-65000 --no-deploy traefik --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666"
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
fi
echo -e "${GR}export K3S_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token)${PL}"
echo -e "${GR}export K3S_URL=https://$(ip addr | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -E -v "^127\.|^255\.|^0\." | head -n 1):6443${PL}"
echo -e "${GR}安装结束,请重启服务器${PL}"
read -r -p "确定请按 y 任意键则退出!请选择:[y/n]" input
if [[ $input != "y" ]]; then
reboot
else
exit 1
fi
作者:SRE运维博客
博客地址: https://www.cnsre.cn/
k3s单机版安装部署 附一键安装脚本的更多相关文章
-
Oracle安装部署之一键安装oracle数据库及其脚本
准备工作:通过ftp工具上传oracle安装软件到linux系统/mnt目录下,并通过unzip命令解压软件.--------------------------------------------- ...
-
Oracle 19C的下载和安装部署(图形安装和静默安装)
Oracle 19C的下载和安装部署(图形安装和静默安装) https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/ ...
-
Apache Hadoop集群离线安装部署(三)——Hbase安装
Apache Hadoop集群离线安装部署(一)——Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apac ...
-
Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)
Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...
-
[转]C# 应用程序安装部署步骤,安装前操作,先退出程序后卸载。
1. 点击[文件]-[新建]-[项目]-其他项目类型-安装和部署,选择安装项目,在下面的名称栏填写SetupTest(或者选择安装向导,一直点击[下一步])2. 安装项目----六个子项依次为:文件系 ...
-
ELK日志监控平台安装部署简介--Elasticsearch安装部署
最近由于工作需要,需要搭建一个ELK日志监控平台,本次采用Filebeat(采集数据)+Elasticsearch(建立索引)+Kibana(展示)架构,实现日志搜索展示功能. 一.安装环境描述: 1 ...
-
vue.js的安装部署+cnpm install 安装过程卡住不动----亲测可用
1.到Node.js的官网下载node node.js的下载地址,下载完成后,我在d盘新建一个文件夹“node”, 安装到node目录下(安装之后环境变量自动配置了,自己无需再配),比如我的安装路径是 ...
-
VMware Vsphere 6.0安装部署 vCenter Server安装
几个不同的组件 vCenter Server:对ESXi主机进行集中管理的服务器端软件,安装在windows server 2008R2或以上的操作系统里,通过SQL 2008R2 或以上版本的数据库 ...
-
Linux安装swoole拓展 (一键安装lnmp后安装可用完美)
一键安装lnmp后安装可用完美 swoole(一键安装完lnmp重启下,之前出现502一直解决不了,不清楚啥情况) 找到对应php版本,在lnmp文件夹的src 1.安装swoole cd /usr/ ...
随机推荐
-
centos 开启启动服务优化
默认开机启动服务列表:(此表转自 http://www.ha97.com/4815.html,另有多处补充) 服务名称 功能 默认 建议 备注说明 NetworkManager 用于自动连接网 ...
-
VCL里为什么要用类函数代替API,为什么要用CM_消息代替虚函数
之所以要用类函数代替API,是因为VCL对它做了一些包装,好在API起作用之前和之后做一些额外的事情:通知和判断等等.之所以类函数要包装一个CM_消息,是因为这样方便程序员(在调用类函数的基础上)截断 ...
-
YII学习,初体验 ,对YII的一些理解.
先说点没用的: 不会选择,选择后不坚持,不断的选择.这是人生中的一个死循环,前两一直迷茫.觉得自己前进方向很不明朗.想去学的东西有很多.想学好YII,想学PYTHON 想学学hadoop什么的,又想研 ...
-
win10 uwp 应用转后台清理内存
我在写小说阅读器,把每个打开的文件的内容读到内存,因为小说都很小,所以放在内存不怕太大,但是我如果打开了一本小说,再打开一本,我不会把先打开的小说的内容清除掉,在内存.所以一旦我打开多小说的时候,内存 ...
-
使用virtualenv进行python环境隔离
按照以下步骤安装 TensorFlow: 1.打开终端(一个 shell),你将在这个终端中执行随后的步骤 2.通过以下命令安装 pip 和 virtualenv sudo easy_install ...
-
卷积运算的本质,以tensorflow中VALID卷积方式为例。
卷积运算在数学上是做矩阵点积,这样可以调整每个像素上的BGR值或HSV值来形成不同的特征.从代码上看,每次卷积核扫描完一个通道是做了一次四重循环.下面以VALID卷积方式为例进行解释. 下面是pyth ...
-
前端安全之XSS
XSS定义 XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻 ...
-
python基础之 反射,md5加密 以及isinstance, type, issubclass内置方法的运用
内容梗概: 1. isinstance, type, issubclass 2. 区分函数和方法 3. 反射(重点) 4. md5加密 1. isinstance, type, issubclass1 ...
-
3.Decorator Pattern(装饰者模式)
装饰者模式: 动态地将责任附加到对象上.想要扩展功能,装饰者提供有别于继承的另一种选择. 举例: 不知道大家学校的食堂是什么点餐制度(或者大家就直接想成吃火锅,我们要火锅料 + 配菜),我们学校的点餐 ...
-
xfsdump命令使用
一:使用xfsdump备份和恢复xfs文件系统 首先了解一下xfsdump的备份级别有以下两种,默认为0(即完全备份) 0 完全备 ...