在昨天的文章中,我们已经在 mac 上成功运行 k3s 了。那么,今天我们更进一步,在上面部署 Jenkins 流水线,正好看看 k3s 实际使用状况如何。
和昨天的步骤类似,但是 VM 的内存设置不同:
1、 准备 Multipass VM 和安装 k3s
让我们创建一个 2GB 内存和 50GB 磁盘的 VM
multipass launch --name k3s --mem 2G --disk 50G
复制代码
安装 k3s 的方法也是一样的,但是你需要时刻检查正在运行的脚本
multipass exec k3s -- sh -c "curl -sfL https://get.k3s.io | sh -"
复制代码
复制 kubeconfig 文件到主机
multipass copy-files k3s:/etc/rancher/k3s/k3s.yaml .
复制代码
使用命令:multipass info k3s,列出 k3s 的信息,以获取 IP 地址,将服务器地址从 https://localhost:6443 替换为https://192.168.64.5:6443,导出 kubeconfig,确认节点是否正常工作。
现在我们已经准备好开发 k3s 的环境。我们不需要进入 VM,因为主机的 kubectl 命令行已经够用了。
2、 动态存储类
我们需要提供动态存储,以便完成一些实际工作。我们使用 local volume provisioner(https://github.com/rancher/local-path-provisioner)来达成这一目的。下载yaml文件并在使用之前检查一下。
curl -LO https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
复制代码
应用它并修改此类存储类为默认存储。
kubectl apply -f local-path-storage.yaml
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
复制代码
现在我们已经准备好动态存储类了。
3、 部署 Jenkins Helm Chart
k3s 通过提供 CRD 来实现内置支持 HelmChart。我们不需要部署 tiller 组件,甚至不需要 helm 命令。
让我们根据以下代码创建一个 HelmChart CRD
apiVersion: k3s.cattle.io/v1
kind: HelmChart
metadata:
name: jenkins
namespace: kube-system
spec:
chart: stable/jenkins
targetNamespace: jenkins
valuesContent: |-
Master:
AdminUser: {{ .adminUser }}
AdminPassword: {{ .adminPassword }}
rbac:
install: true
复制代码
请注意,在元数据中的命名空间用于 HelmChart 对象。k3s 在 kube-sysytem 中监控 CRD 对象,如果创建了任一新的 HelmChart 对象,将启动 Helm 安装 job。
Chart 定义要部署哪个 repo 和 Helm Chart。Jenkins 应该位于目标命名空间中。我没有使用 readme 示例中的“set”关键字,而是使用 valuesContent,这样可以在其中应用与 Chart 的 value.yaml 文件相同的格式。
无需改变 Jenkins,将文件另存为 jenkins.yaml。创建目标命名空间,并将其作为 Kubernetes 对象 yaml 文件应用它。
kubectl create ns jenkins
kubectl apply -f jenkins.yaml
复制代码
开始监控 Helm 安装 job
kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
coredns-7748f7f6df-g6rgw 1/1 Running 0 138m
helm-install-jenkins-txxjn 0/1 Completed 0 111m
helm-install-traefik-bnc5x 0/1 Completed 0 138m
svclb-traefik-b65f58f65-rxllp 2/2 Running 0 138m
traefik-5cc8776646-nfclx 1/1 Running 0 138m
复制代码
验证 PVC 是否绑定
kubectl -n jenkins get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
jenkins Bound pvc-18988281-4d45-11e9-b75c-5ef9efd9374c 8Gi RWO local-path 113m
复制代码
同时还要验证 pod 是否正在运行。
kubectl -n jenkins get pods
NAME READY STATUS RESTARTS AGE
jenkins-6b6f58bc8d-hbf4r 1/1 Running 0 113m
svclb-jenkins-74fdf6b9f4-zxnwz 1/1 Running 0 113m
复制代码
4、 访问 Jenkins
寻找服务端口
kubectl -n jenkins get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins LoadBalancer 10.43.75.62 192.168.64.5 8080:30254/TCP 115m
jenkins-agent ClusterIP 10.43.239.13 <none> 50000/TCP 115m
复制代码
现在,我们可以通过 http://192.168.64.5:8080. 访问 Jenkins,如下所示:
如果你还想了解更多关于 k3s 的使用技巧,欢迎参加 10 月 26 日 在 深圳 举办的 k3s 线下 workshop ,将由 Rancher Labs 资深架构师为你详细介绍 k3s 的功能、特性以及使用场景,并进行现场 demo,还会带你一起用自己的笔记本搭建 k3s 集群噢。点击此处,赶紧报名吧!
评论