上个月底, 由于一些迷之原因我从扇贝跑路了 又过回了大学那会养生的日子,有空来捣鼓一些奇奇怪怪的东西。 最近在研究k3s,最终目标是将自己的一些项目迁移上去 这里开始准备写一系列的文章来记录一下整个过程
上个月底, 由于一些迷之原因我从扇贝跑路了
Lightweight Kubernetes. 5 less than k8s
先简单解释一下啥是k8s
k8s是容器编排系统 说的再直白一点: k8s可以管理不同机子上的docker
k8s是容器编排系统
说的再直白一点:
现在各厂都在像容器化的方向发展
作为个人开发者当然也想用类似的工具
但k8s集群的部署要求太高了(因为要跑etcd)而不得不放弃
一个小型k8s集群master节点的推荐配置是 2c 8g !!
今年2月26日Rancher发布了k3s 那时我就知道,有戏了!
k3s其实是k8s的一个超轻量的发型版 轻量到啥地步呢?
k3s打包后只有一个40mb大小的二进位包
运行k3s server只需要200m左右的ram
这样看来一台1c1g的vps就能愉快的跑起来了
1c1g的vps
我还发现有国外老哥用k3s组了一个树莓派集群
效果大概是这样的:
由于k3s目前不支持mac 所以我找了一台1c1g的vultr家的vps来当master node 如果你也想要买一台来练练手 这里有个推广链接 注册冲5刀可送50刀: 注册地址
由于k3s目前不支持mac
curl -sfL https://get.k3s.io | sh -
这样一个单节点的k3s服务就跑起来了
安装kubectl :brew install kubectl
brew install kubectl
配置集群证书:
将vps上的 /etc/rancher/k3s/k3s.yaml 的内容
/etc/rancher/k3s/k3s.yaml
写入本机的~/.kube/config文件
~/.kube/config
试一下: kubectl get node
kubectl get node
可以看到这台节点已经成功跑起来了(ready)
一般都会跑个helloworld之类的app来试一下效果
helloworld
我觉得这样太没意思啦,我们来跑个能用的比如 v2ray
v2ray
kind: Namespace apiVersion: v1 metadata: name: playground labels: name: playground
拷贝以上文件为ns-playgroud.yml
ns-playgroud.yml
在文件对应的目录运行: kubectl apply -f ns-playground.yml
kubectl apply -f ns-playground.yml
这样我们就有一个名为playground的namespce了
playground
运行 kubectl get ns 可以查看所有的namespace
kubectl get ns
configmap
apiVersion: v1 kind: ConfigMap metadata: name: v2ray-config-file namespace: playground labels: k8s-app: v2ray data: config.json: |- { "stats": {}, "api": { "tag": "api", "services": [ "StatsService" ] }, "policy": { "levels": { "0": { "statsUserUplink": true, "statsUserDownlink": true } }, "system": { "statsInboundUplink": true, "statsInboundDownlink": true } }, "log": { "access": "/dev/stdout", "error": "/dev/stderr", "loglevel": "info" }, "inbound": { "port": 8002, "tag": "statin", "protocol": "vmess", "settings": { "clients": [ { "id": "11111111-2222-3333-4444-555555555555", "level": 1, "alterId": 16, "email": "[email protected]" } ] } }, "inboundDetour": [ { "listen": "127.0.0.1", "port": 6000, "protocol": "dokodemo-door", "settings": { "address": "127.0.0.1" }, "tag": "api" } ], "outbound": { "protocol": "freedom", "settings": {} }, "routing": { "strategy": "rules", "settings": { "rules": [ { "inboundTag": [ "api" ], "outboundTag": "api", "type": "field" } ] } } }
拷贝以上文件为cm-v2ray.yml
cm-v2ray.yml
在文件对应的目录运行: kubectl apply -f cm-v2ray.yml -n playground
kubectl apply -f cm-v2ray.yml -n playground
这样v2ray的配置文件就作为一种资源被存在k3s里了
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: v2ray-vu namespace: playground spec: replicas: 1 selector: matchLabels: app: v2ray-vu strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: v2ray-vu spec: containers: - name: app image: v2ray/official imagePullPolicy: IfNotPresent ports: - containerPort: 8002 resources: limits: cpu: 200m memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: v2ray-config-file mountPath: "/etc/v2ray" readOnly: true volumes: - name: v2ray-config-file configMap: name: v2ray-config-file
这里用了我们刚创建的configmap :v2ray-config-file
v2ray-config-file
并将其挂载到容器的/etc/v2ray目录下
/etc/v2ray
这样v2ray跑起来的时候就能读取到准备的配置了
拷贝以上文件为dp-v2ray.yml
dp-v2ray.yml
在文件对应的目录运行: kubectl apply -f dp-v2ray.yml -n playground playground
kubectl apply -f dp-v2ray.yml -n playground playground
看一下服务有没有跑起来: kubectl get pod -n playground
kubectl get pod -n playground
可以看到v2ray已经处于running状态了
running
kind: Service apiVersion: v1 metadata: name: v2ray-vu namespace: playground spec: selector: app: v2ray-vu ports: - port: 8002 targetPort: 8002 externalIPs: - xx.xx.xx.xx
注意配置里的externalIPs 需要替换成你自己vps的ip
externalIPs
拷贝以上文件为svc-v2ray.yml
svc-v2ray.yml
在文件对应的目录运行: kubectl apply -f svc-v2ray.yml -n playground playground
kubectl apply -f svc-v2ray.yml -n playground playground
这样我们就将v2ray的服务暴露在节点的8002埠
所有从8002埠流量都会被转发到v2ray的pod里
查看访问日志 : kubectl logs -f podname -n playground
kubectl logs -f podname -n playground
podname 可以通过之前的get pod 命令获得
get pod
测个速度看看:
效果不错,打完收工!
这篇文章还是会发在爬虫的专栏下
如果这篇文章反响好的话 我可能会再开一个伺服器/云相关的专栏
伺服器/云
哪位大佬给取个名字呗?
推荐阅读: