前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于k8s运行wasm的新玩具-krustlet

基于k8s运行wasm的新玩具-krustlet

作者头像
有点技术
发布2020-07-13 11:23:19
6950
发布2020-07-13 11:23:19
举报
文章被收录于专栏:有点技术有点技术

介绍

Krustlet 是基于k8s运行wasm程序的负载,通过亲和性来运行wasm程序,其实现了kubelet api,且兼容了 kubectl logskubectldelete 命令。

接下来将一步步安装、运行krustlet

kind安装

kind config配置

代码语言:javascript
复制
kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
kubeadmConfigPatches:
- |
  apiVersion: kubeadm.k8s.io/v1beta1
  kind: ClusterConfiguration
  metadata:
    name: config
  networking:
    serviceSubnet: 10.0.0.0/16
  imageRepository: registry.aliyuncs.com/google_containers
  nodeRegistration:
    kubeletExtraArgs:
      pod-infra-container-image: registry.aliyuncs.com/google_containers/pause:3.1
- |
  apiVersion: kubeadm.k8s.io/v1beta1
  kind: InitConfiguration
  metadata:
    name: config
  networking:
    serviceSubnet: 10.0.0.0/16
  imageRepository: registry.aliyuncs.com/google_containers
nodes:
- role: control-plane
- role: worker
- role: worker

创建集群

代码语言:javascript
复制
kind create --config=kind-config.yaml

运行krustlet

生成kubeconfig

通过脚本生成bootstrap config

代码语言:javascript
复制
bash <(curl https://raw.githubusercontent.com/deislabs/krustlet/master/docs/howto/assets/bootstrap.sh)

krustlet安装

代码语言:javascript
复制
wget https://krustlet.blob.core.windows.net/releases/krustlet-v0.3.0-macos-amd64.tar.gz
tar xf krustlet-v0.3.0-macos-amd64.tar.gz
chmod +x krustlet-*
mv krustlet-* /usr/local/bin/

启动krustlet

代码语言:javascript
复制
/usr/local/bin/krustlet-wasi  --node-ip 192.168.11.5 --bootstrap-file=~/.krustlet/config/bootstrap.conf

approve 证书

像kubelet一样,通过bootstrap config启动后会发起一个csr,我们需要对其approve

代码语言:javascript
复制
kubectl certificate approve  Mbp.local-tls

查看状态

可以看到已经处于ready状态

代码语言:javascript
复制
kubectl get nodes
NAME                 STATUS   ROLES    AGE   VERSION
kind-control-plane   Ready    master   16m   v1.18.2
kind-worker          Ready    <none>   15m   v1.18.2
kind-worker2         Ready    <none>   15m   v1.18.2
mbp.local            Ready    agent    9s    0.3.0

查看污点

代码语言:javascript
复制
kubectl get nodes mbp.local -o json | jq .spec.taints
[
  {
    "effect": "NoExecute",
    "key": "krustlet/arch",
    "value": "wasm32-wasi"
  }
]

krustlet运行wasi

下载wasm-to-oci

我们需要下载wasm-to-oci工具,使用该工具可以将wasm程序推送到docker仓库。

代码语言:javascript
复制
wget https://github.com/engineerd/wasm-to-oci/releases/download/v0.1.1/darwin-amd64-wasm-to-oci

生成wasi程序

创建项目

代码语言:javascript
复制
cargo new krust-test

代码如下

代码语言:javascript
复制
#[no_mangle]
fn _start() {
    let mut i:i32 = 0;
    loop {
        println!("hello {:?}",i);
        i+=1;
        sleep(Duration::new(1, 0))
    }
}

编译

代码语言:javascript
复制
cargo build --target=wasm32-wasi

准备一个oci v2registry

支持以下几种registry

  • Distribution (open source, version 2.7+)
  • Azure Container Registry
  • Google Container Registry
  • Harbor Container Registry v2.0

这里我自行搭建了一个,证书通过letsencrypt生成

代码语言:javascript
复制
docker run   -v /media:/certs \
>   -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
>   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.crt \
>   -e REGISTRY_HTTP_TLS_KEY=private.pem \
>   -p 443:443 \
>   registry:2

将编译好的wasm文件推送到仓库

代码语言:javascript
复制
wasm-to-oci push .//target/wasm32-wasi/release/krustlet_test.wasm reg.rocdu.top/test/krustlet:v1

运行wasi wavm程序

我们将运行一个wasm pod,通过容忍策略让该pod可以运行在我们的krustlet节点上面

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: krustlet-tutorial
spec:
  containers:
    - name: krustlet-tutorial
      image: reg.rocdu.top/test/krustlet:v1
  tolerations:
    - key: "krustlet/arch"
      operator: "Equal"
      value: "wasm32-wasi"
      effect: "NoExecute"

查看运行状态,可以看到已经处于运行状态,让我们看一下日志的输出,可以看到是我们预期的输出。

代码语言:javascript
复制
kubectl get pods -w
NAME                READY   STATUS    RESTARTS   AGE
krustlet-tutorial   0/1     Pending   0          14s
krustlet-tutorial   0/1     Running   0          14s


kubectl logs krustlet-tutorial -f
hello 1
hello 2
hello 3

总结

krustlet以及wasi都是很不成熟的项目,仅限用于测试。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有点技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • kind安装
    • kind config配置
      • 创建集群
      • 运行krustlet
        • 生成kubeconfig
          • krustlet安装
            • 启动krustlet
              • approve 证书
                • 查看状态
                • krustlet运行wasi
                  • 下载wasm-to-oci
                    • 生成wasi程序
                      • 准备一个oci v2registry
                        • 运行wasi wavm程序
                        • 总结
                        相关产品与服务
                        容器服务
                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档