k3s文档翻译

前言

最近因为毕业设计的原因需要精简以及裁剪k8s使其能够在树莓派上运行,于是找到了k3s。
k3s官网
github

因为文档以后很有可能会有变动,故留下翻译日期:
2019.3.14

正文

K3s-比k8s少5个方面

k3s使轻量班的kubernetes.比起k8s,它方便安装,只占用一半的内存,所有组件都在一个小于40mb的二进制文件里
对于以下5方面更加优异:

  • Edge
  • IoT
  • CI
  • ARM(这正是我所需要的)
  • 一些精通k8s集群的人也无法解决的情况

它是什么

k3s是一个完全兼容k8s的分布式集群,相比k8s,它有以下的改变:

  1. 一些弃用的,测试性的,非默认的特性被删除,你不应该关注那些已经被删除的东西
  2. 删除了大部分能够被tree以外的插件替换的in-tree插件(比如说云提供商以及存储插件)
  3. 将sqlite3作为默认的存储机制,etcd3仍可用,但不是默认的
  4. 包装进了一个简单的启动脚本,该脚本可以处理大量的复杂的工作。
  5. 无操作系统依赖(一个正常的内核和cgroup挂载即可),k3s依赖包:
  • containerd
    (一种容器)
  • flannel
  • CoreDNS
  • CNI
  • 一些主机的设施(iptables,socat等)

快速开始

  1. 下载最新版本k3s,x86_64,armhf,arm64都是被支持的
  2. 启动服务器
sudo k3s server &
# Kubeconfig is written to /etc/rancher/k3s/k3s.yaml
sudo k3s kubectl get node

# On a different node run the below. NODE_TOKEN comes from /var/lib/rancher/k3s/server/node-token 
# on your server
sudo k3s agent --server https://myserver:6443 --token ${NODE_TOKEN}

启动服务器

需要启动服务器只需要:
k3s server
你将得到类似于以下输出:

INFO[2019-01-22T15:16:19.908493986-07:00] Starting k3s dev                             
INFO[2019-01-22T15:16:19.908934479-07:00] Running kube-apiserver --allow-privileged=true --authorization-mode Node,RBAC --service-account-signing-key-file /var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range 10.43.0.0/16 --advertise-port 6445 --advertise-address 127.0.0.1 --insecure-port 0 --secure-port 6444 --bind-address 127.0.0.1 --tls-cert-file /var/lib/rancher/k3s/server/tls/localhost.crt --tls-private-key-file /var/lib/rancher/k3s/server/tls/localhost.key --service-account-key-file /var/lib/rancher/k3s/server/tls/service.key --service-account-issuer k3s --api-audiences unknown --basic-auth-file /var/lib/rancher/k3s/server/cred/passwd --kubelet-client-certificate /var/lib/rancher/k3s/server/tls/token-node.crt --kubelet-client-key /var/lib/rancher/k3s/server/tls/token-node.key 
Flag --insecure-port has been deprecated, This flag will be removed in a future version.
INFO[2019-01-22T15:16:20.196766005-07:00] Running kube-scheduler --kubeconfig /var/lib/rancher/k3s/server/cred/kubeconfig-system.yaml --port 0 --secure-port 0 --leader-elect=false 
INFO[2019-01-22T15:16:20.196880841-07:00] Running kube-controller-manager --kubeconfig /var/lib/rancher/k3s/server/cred/kubeconfig-system.yaml --service-account-private-key-file /var/lib/rancher/k3s/server/tls/service.key --allocate-node-cidrs --cluster-cidr 10.42.0.0/16 --root-ca-file /var/lib/rancher/k3s/server/tls/token-ca.crt --port 0 --secure-port 0 --leader-elect=false 
Flag --port has been deprecated, see --secure-port instead.
INFO[2019-01-22T15:16:20.273441984-07:00] Listening on :6443                           
INFO[2019-01-22T15:16:20.278383446-07:00] Writing manifest: /var/lib/rancher/k3s/server/manifests/coredns.yaml 
INFO[2019-01-22T15:16:20.474454524-07:00] Node token is available at /var/lib/rancher/k3s/server/node-token 
INFO[2019-01-22T15:16:20.474471391-07:00] To join node to cluster: k3s agent -s https://10.20.0.3:6443 -t ${NODE_TOKEN} 
INFO[2019-01-22T15:16:20.541027133-07:00] Wrote kubeconfig /etc/rancher/k3s/k3s.yaml
INFO[2019-01-22T15:16:20.541049100-07:00] Run: k3s kubectl    

因为代理将输出大量的Logs,所以输出有可能会更长。默认的设置是服务器会将它自己注册为一个节点(去运行代理)。控制部分成为集群的一部分在最近是非常常见的一种用法。如果不想让服务器成为代理,可以运行以下指令:
k3s server --disable-agent
这样,你可以将agent作为独立的进程来运行或根本不去运行agent。

加入节点

服务器启动后会创建一个文件/var/lib/rancher/k3s/server/node-token,将该文件中的内容作为NODE_TOKEN并在agent节点执行以下指令:

k3s agent --server https://myserver:6443 --token ${NODE_TOKEN}

从集群外连接集群

/etc/rancher/k3s/k3s.yaml复制到你集群外的机器上的~/.kube/config这一位置,然后将“localhost”用你k3s服务器的ip来代替,之后就可以在该机器上用kubectl来管理你的k3s集群了。

组件自动部署

任何从/var/lib/rancher/k3s/server/manifests找到的文件都可以用以类似于kubetl apply的指令自动的被部署到kubernetes上
甚至可以部署Helm charts(是k8s的包管理工具)。
k3s支持CRD controller (用户自定义组件控制器)来安装 charts。
一个YAML文件可以如下配置(样例取自/var/lib/rancher/k3s/server/manifests/traefik.yaml

apiVersion: k3s.cattle.io/v1
kind: HelmChart
metadata:
  name: traefik
  namespace: kube-system
spec:
  chart: stable/traefik
  set:
    rbac.enabled: "true"
    ssl.enabled: "true"

用源码build

如果用以下指令,代码克隆会快很多
git clone --depth 1 https://github.com/rancher/k3s.git
因为该仓库包含了所有Kubernetes的历史文件,所以--depth 1会避免重复下载
为了编译安装,你需要go 1.11和一个正常的GOPATH,使用以下指令来编译:

go build -o k3s
go build -o kubectl ./cmd/kubectl
go build -o hyperkube ./vendor/k8s.io/kubernetes/cmd/hyperkube

这将创建主要的执行文件,但不包含containerd,CNI等等的依赖,要运行一个拥有所有依赖的server和agent,执行以下脚本。

# Server
./scripts/dev-server.sh

# Agent
./scripts/dev-agent.sh

卸载server

如何你使用了install.sh脚本来安装你的k3s,你可以使用在安装时产生的卸载脚本来卸载,该脚本将创建于server节点的/usr/local/bin/k3s-uninstall.sh

kubernetes 源码

Kubernetes的源码在vendor/目录下,而其代码来源在./vendor.conf文件中,去到相应的仓库/文件你会发现所有的kubernetes源

需要开放的端口/网络安全

server需要6443端口来被其他节点连接。节点之间需要通过UDP的4789端口来连接。这用于flannel VXLAN。如果你的CNI组件使用的不是flannel,那么4789端口就不再被k3s所需要。节点不应该再听其他端口。k3s使用反向隧道使节点连接到server以及所有的kubelet都会流经该隧道。

重要的是,节点中的VXLAN端口不应该暴露于公网,这将会使你的集群被任何人访问到,使你的节点在关闭了4789端口的防火墙下运行。

Server HA(我也没搞懂这是什么)

别现在说,目前处于崩溃状态

使用Docker(以及Docker组件)

如果我不能使我的集群在Docker上跑我将不是我。rancher/k3s镜像是可以将k3s server 和 agent用docker容器跑起来的,一个 docker-compose.yml在该仓库的根目录下,这是一个k3s server 如何跑在docker下的例子。要使用docker-compose,执行

docker-compose up --scale node=3
# kubeconfig is written to current dir
kubectl --kubeconfig kubeconfig.yaml get node

NAME           STATUS   ROLES    AGE   VERSION
497278a2d6a2   Ready    <none>   11s   v1.13.2-k3s2
d54c8b17c055   Ready    <none>   11s   v1.13.2-k3s2
db7a5a5a5bdd   Ready    <none>   12s   v1.13.2-k3s2

Hyperkube

k3s被包装在了一个文件中来简化使用K8s时的大量的令人头疼的工作,如果你不想使用该包装,而只是想要一个精简版的k8s发行版,那么我们的发行版中包含了hyperkube
(译者注:Kubernetes is a set of binaries
kube-apiproxy
kube-scheduler
kube-control-manager
kubelet
kube-proxy
hyperkube is a wrapper for all these binaries. So once you deploy hyperkube, it will install all the binaries. No need to install those binary individually.)
二进制文件你可以使用.这取决于你如何去使用hyperkube。如果你想要分开的二进制文件,你需要从源码中自己编译它们。

containerd和Docker

k3s包含并且默认的容器是containerd。为什么?因为它就是更好。如果你想使用docker那么先停下来想想,“真的吗?我真的需要更多的头痛吗?”如果还是回答yes,那么你只需要使用–docker参数即可:
k3s agent -u ${SERVER_URL} -t ${NODE_TOKEN} --docker &

systemd工具

如果你被限制在systemd工具的桎梏下(正如我们大多数人一样),在这个仓库的根目录下有一个样例unit文件k3s.service如下:

[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
After=network.target

[Service]
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s server
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity

[Install]
WantedBy=multi-user.target

k3s的install.sh脚本同样提供了在systemd下的方便的安装方法,安装agent和server作为k3s的服务只需要:
curl -sfL https://get.k3s.io | sh -
这一行脚本将尝试下载最新发行版,若要规定下载版本可以用INSTALL_K3S_VERSION环境变量:
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=vX.Y.Z-rc1 sh -
若只需要安装server不装agent
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable-agent" sh -
只装agent不装server
curl -sfL https://get.k3s.io | K3S_URL=https://example-url:6443 K3S_TOKEN=XXX sh -
……
剩下的是一堆关于安装脚本的帮助说明,没什么帮助,便不再翻译

Flannel

Flannel被默认包含,如果你不想要flannel则运行时使用–no-flannel
k3s agent -u ${SERVER_URL} -t ${NODE_TOKEN} --no-flannel &
这将需要你安装你自己的CNI驱动。

CoreDNS

CoreDNS在agent一开始便被部署,在server使用–no-deploy coredns 来取消
k3s server --no-deploy coredns
如果你不安装CoreDNS则需要你自己提供集群的DNS

Traefik

Traefik是在server开始是被部署的,需要取消运行以下指令
k3s server --no-deploy traefik

Service load balancer

k3s包含基本的服务负载均衡器,比如说,如果你试着创建监听80端口的负载均衡器,它将会在集群中尝试寻找80端口空闲的主机,若 不存在,则负载均衡器将保持pending状态。
如果需要取消内置的负载均衡器(如果你想要使用其他的比如说MetalLB)只需要在server启动时添加 --no-deploy=servicelb

TODO

目前还处于崩溃状态或者是为了产品质量需要被完善的事情
(不想翻译了,如果需要提交commit给rancher应该能看得懂)

  1. Metrics API due to kube aggregation not being setup
  2. HA
  3. Work on e2e, sonobouy.
  4. etcd doesn’t actually work because args aren’t exposed
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值