k0s 使用教程:如何快速搭建 Kubernetes 集群
k0s官方文档
容器镜像服务 ACR
1 k0s简介
k0s是一个开源、包罗万象的Kubernetes发行版,配置了构建Kubernetes集群所需的所有功能。由于其简单的设计、灵活的部署选项和适度的系统需求,k0s非常适合Any cloud、Bare metal、Edge and IoT。
k0s大大降低了安装和运行CNCF认证的Kubernetes发行版的复杂性。有了k0s,新集群可以在几分钟内启动,开发者之间的摩擦减少到零。这使得任何在Kubernetes没有特殊技能或专业知识的人都可以轻松开始。
k0s作为一个二进制文件分发,除了主机操作系统内核之外,没有主机操作系统依赖项。它可以与任何Linux一起工作,无需额外的软件包或配置。任何安全漏洞或性能问题都可以直接在k0s发行版中修复,这使得集群保持最新和安全非常简单。
(1)支持四种安装方式
single-node, multi-node, airgap and Docker
(2)支持多种数据存储后端
etcd (default for multi-node clusters),
SQLite (default for single node clusters),
MySQL, and PostgreSQL
(3)适度的系统要求
1个vCPU及1GB RAM
1.1 k0s关键特点
(1)Certified and 100% upstream Kubernetes.
认证和100%上游Kubernetes。
(2)Multiple installation methods: single-node, multi-node, airgap and Docker.
多种安装方式:单节点、多节点、airgap、Docker。
(3)Automatic lifecycle management with k0sctl: upgrade, backup and restore.
使用k0sctl进行自动生命周期管理:升级、备份和恢复。
(4)Modest system requirements (1 vCPU, 1 GB RAM).
适度的系统要求(1个vCPU、1 GB RAM)。
(5)Available as a single binary with no external runtime dependencies besides the kernel.
作为单个二进制文件提供,除了内核之外,没有外部运行时依赖项。
(6)Flexible deployment options with control plane isolation as default.
灵活的部署选项,默认为控制平面隔离。
(7)Scalable from a single node to large, high-available clusters.
可从单个节点扩展到大型、高可用群集。
(8)Supports custom Container Network Interface (CNI) plugins (Kube-Router is the default, Calico is offered as a preconfigured alternative).
支持自定义容器网络接口(CNI)插件(默认为Kube路由器,Calico作为预配置的替代品提供)。
(9)Supports custom Container Runtime Interface (CRI) plugins(containerd is the default).
支持自定义容器运行时接口(CRI)插件(默认为containerd)。
(10)Supports all Kubernetes storage options with Container Storage Interface (CSI), includes OpenEBS host-local storage provider.
通过容器存储接口(CSI)支持所有Kubernetes存储选项,包括OpenEBS主机本地存储提供程序。
(11)Supports a variety of datastore backends: etcd(default for multi-node clusters), SQLite (default for single node clusters), MySQL, and PostgreSQL.
支持多种数据存储后端:etcd(多节点集群默认)、SQLite(单节点集群默认)、MySQL和PostgreSQL。
(12)Supports x86-64, ARM64 and ARMv7.
支持x86-64、ARM64和ARMv7。
(13)Includes Konnectivity service, CoreDNS and Metrics Server.
包括Konnectivity服务、CoreDNS和Metrics服务器。
1.2 k0s使用的CRE(containerd)
2 单节点安装
使用单个节点创建完整的Kubernetes集群。
快速启动完成后,您将拥有一个完整的Kubernetes集群,其中有一个节点,包括控制器和工作节点。这种设置非常适合于不需要高可用性和多个节点的环境。
CentOS操作系统
(1)主机名
192.168.1.8 myspark
127.0.0.1 localhost注意不可少
(2)防火墙和SELinux
主机的防火墙和SELinux均已关闭
firewall-cmd --state
systemctl disable firewalld
systemctl stop firewalld
(3)系统架构和内核版本
Host operating system:
Linux (kernel v4.3 or later)
Windows Server 2019
Architecture:
x86-64、ARM64、ARMv7
2.1 在线安装
下载并安装
curl -sSLf https://get.k0s.sh | sudo sh
get.k0s.sh获取到的可执行代码安装。
#!/bin/sh
set -e
if [ -n "${DEBUG}" ]; then
set -x
fi
_k0s_latest() {
curl -sSLf "https://docs.k0sproject.io/stable.txt"
}
_detect_binary() {
os="$(uname)"
case "$os" in
Linux)
echo "k0s"
;;
*)
echo "Unsupported operating system: $os" 1>&2;
return 1
;;
esac
unset os
}
_detect_arch() {
arch="$(uname -m)"
case "$arch" in
amd64|x86_64)
echo "amd64"
;;
arm64|aarch64)
echo "arm64"
;;
armv7l|armv8l|arm)
echo "arm"
;;
*)
echo "Unsupported processor architecture: $arch" 1>&2;
return 1
;;
esac
unset arch
}
_download_url() {
echo "https://github.com/k0sproject/k0s/releases/download/$K0S_VERSION/$k0sBinary-$K0S_VERSION-$k0sArch"
}
main() {
if [ -z "${K0S_VERSION}" ]; then
K0S_VERSION=$(_k0s_latest)
fi
k0sInstallPath=/usr/local/bin
k0sBinary="$(_detect_binary)"
k0sArch="$(_detect_arch)"
k0sDownloadUrl="$(_download_url)"
mkdir -p -- "$k0sInstallPath"
echo "Downloading k0s from URL: $k0sDownloadUrl"
curl -sSLf "$k0sDownloadUrl" >"$k0sInstallPath/$k0sBinary"
chmod 755 -- "$k0sInstallPath/$k0sBinary"
echo "k0s is now executable in $k0sInstallPath"
}
main
2.2 离线安装
2.2.1 安装启动k0s服务
结合在线安装,下载二进制代码。
一、下载k0s
运行k0s下载脚本下载最新稳定版本的k0s,并使其可从/usr/bin/k0s执行。
(1)下载二进制文件安装
wget https://github.com/k0sproject/k0s/releases/download/v1.23.6+k0s.0/k0s-v1.23.6+k0s.0-amd64
chmod a+x k0s-v1.23.6+k0s.0-amd64
mv k0s-v1.23.6+k0s.0-amd64 /usr/bin/k0s
(2)查看版本
k0s version
二、将k0s作为服务安装
k0s install子命令将k0s作为系统服务安装在运行一个受支持的init系统(Systemd或OpenRC)的本地主机上。您可以为worker、controller或单节点(controller+worker)实例执行安装。
运行以下命令以安装单节点k0s,该节点包括具有默认配置的控制器和辅助功能:
k0s install controller --single
运行完可以查看服务状态为dead。
systemctl status k0scontroller
三、将k0s作为服务启动
k0s start
运行完可以查看服务状态为running。
systemctl status k0scontroller
节点重启后,k0s服务将自动启动。
在节点准备好部署应用程序之前,通常需要一两分钟。
四、检查服务、日志和k0s状态
k0s status
运行完输出如下结果
Version: v1.23.6+k0s.0
Process ID: 2065
Role: controller
Workloads: true
SingleNode: true
2.2.2 解决科学上网问题
一、使用kubectl访问集群
注意:k0s包括Kubernetes命令行工具kubectl。
使用kubectl部署应用程序或检查节点状态:
k0s kubectl get nodes
k0s kubectl get pods -n kube-system
状态为Pending查出的原因是default-scheduler 0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn’t tolerate.不必理会,等镜像加载好后自动恢复正常。
k0s kubectl describe pod kube-proxy-92gzz -n kube-system
k0s kubectl describe pod kube-router-skc99 -n kube-system
【查出缺少镜像】
k8s.gcr.io/pause:3.5
k8s.gcr.io/kube-proxy:v1.23.6
k8s.gcr.io/coredns/coredns:v1.7.0
k8s.gcr.io/metrics-server/metrics-server:v0.5.2
二、拉取镜像
(1)拉取镜像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.6
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.7.0
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.2
(2)修改标签
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5 k8s.gcr.io/pause:3.5
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.6 k8s.gcr.io/kube-proxy:v1.23.6
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.7.0 k8s.gcr.io/coredns/coredns:v1.7.0
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.2 k8s.gcr.io/metrics-server/metrics-server:v0.5.2
(3)删除原镜像
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.6
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.7.0
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.2
当本地Docker镜像仓库中有了k8s.gcr.io/pause:3.5这个镜像之后,Pod却仍然无法获取镜像,这是怎么回事?原来k0s使用的CRE是containerd,我们需要再将Docker镜像仓库里的镜像放到k0s使用的镜像仓库里去:
sudo docker save k8s.gcr.io/pause:3.5 > pause.tar
sudo docker save k8s.gcr.io/kube-proxy:v1.23.6 > kube-proxy.tar
sudo docker save k8s.gcr.io/coredns/coredns:v1.7.0 > coredns.tar
sudo docker save k8s.gcr.io/metrics-server/metrics-server:v0.5.2 > metrics-server.tar
k0s ctr image import pause.tar
k0s ctr image import kube-proxy.tar
k0s ctr image import coredns.tar
k0s ctr image import metrics-server.tar
k0s ctr image list查看镜像
2.3 卸载k0s
(1)停止服务。
k0s stop
(2)执行k0s重置命令。
k0s reset命令清除已安装的系统服务、数据目录、容器、装载和网络名称空间。
k0s reset
(3)重新启动系统。
一些小的k0s片段即使在重置之后仍然存在(例如,iptables)。因此,您应该在运行k0s reset命令后重新启动。