本地计算机上使用轻量级Kubernetes - k3s

6e5e5101a527bca2c272e579d6bba5e6.png本篇文章是「DevOps云学堂」与你共同进步的第 62



如何在工作站上启动并运行轻量级 Kubernetes。K3s 是一种轻量级、经过认证的 Kubernetes 发行版,专为资源受限的环境(例如边缘设备、物联网设备和小规模部署)而设计。它由 Rancher Labs 开发,构建的目标是提供一个简约且易于使用的 Kubernetes 发行版,消耗更少的资源,同时保持与 Kubernetes API 的完全兼容性。
9cc4564c0e76ea9f1f1660d8b0d2758c.png

K3s 的一些主要功能和特性

  1. 轻量级且资源高效:与标准 Kubernetes 发行版相比,K3s 的设计占地面积小,消耗的资源更少。它具有更少的内存占用、更小的二进制大小和更低的 CPU 开销,使其适合资源有限的环境。

  2. 易于安装和管理:K3s 的设计宗旨是易于安装和管理。它可以安装在各种操作系统上,包括 Linux、macOS 和 Windows。安装过程得到简化,可以使用单个二进制文件完成。默认情况下,它还提供了一个轻量级容器运行时,containerd。

  3. 高可用性和弹性:K3s 支持与标准 Kubernetes 相同的高可用性功能,允许您部署高弹性集群。它提供自动 etcd 快照和备份、控制平面组件自动扩展以及集成服务负载平衡等功能。

  4. 安全性和兼容性:K3s 保持与 Kubernetes API 的完全兼容,确保现有的 Kubernetes 应用程序和工具无需修改即可与 K3s 一起使用。它还包括安全增强功能,例如内置 TLS 加密、RBAC(基于角色的访问控制)以及对 Seccomp 和 AppArmor 的容器安全支持。

K3 的用例

  1. 边缘计算:K3s非常适合资源有限、需要轻量级Kubernetes发行版的边缘计算场景。它支持在边缘设备上部署和管理容器化应用程序,使组织能够在更接近数据源的地方处理数据并减少延迟。

  2. IoT 部署:K3 可用于需要 Kubernetes 功能但设备资源有限的物联网 (IoT) 部署。借助 K3s,您可以编排和管理 IoT 设备上的容器化工作负载,为 IoT 应用程序开发和部署提供可扩展且灵活的解决方案。

  3. 开发和测试环境:K3s可用于搭建轻量级的Kubernetes集群,用于开发和测试目的。它允许开发人员在笔记本电脑或台式机上轻松创建本地 Kubernetes 环境,而无需消耗过多资源,从而使他们能够高效地测试和迭代应用程序。

  4. 小规模部署:K3s 适用于小规模部署,在这种情况下,成熟的 Kubernetes 发行版可能会显得大材小用。它提供了简化的安装过程,并且需要更少的资源,使得在小规模生产环境或个人项目中部署和管理 Kubernetes 集群变得更加容易。

总体而言,K3s 提供了一个轻量级、易于使用且资源高效的 Kubernetes 发行版,在边缘计算、物联网、开发/测试和小规模部署场景中特别有用。

安装 k3d,k3s 的包装器

(base) skondla@Sams-MBP:Downloads $ brew search k3d
==> Formulae
k3d ✔                                                                                                       f3d

# k3d is already installed on my macbook 

(base) skondla@Sams-MBP:Downloads $ brew update && brew install k3d
Updated 3 taps (weaveworks/tap, homebrew/core and homebrew/cask).
==> New Formulae
bbot                                                                    erlang@25                                                               trzsz-ssh
==> New Casks
whisky
==> Outdated Formulae
aws-iam-authenticator                                                   eksctl                                                                  libuv

You have 3 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
Warning: k3d 5.5.1 is already installed and up-to-date.
To reinstall 5.5.1, run:
  brew reinstall k3d

(base) skondla@Sams-MBP:Downloads $ which k3d
/usr/local/bin/k3d
(base) skondla@Sams-MBP:~ $ k3d cluster create devhacluster --servers 3 --agents 1
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-devhacluster'
INFO[0000] Created image volume k3d-devhacluster-images
INFO[0000] Starting new tools node...
INFO[0000] Creating initializing server node
INFO[0000] Creating node 'k3d-devhacluster-server-0'
INFO[0000] Starting Node 'k3d-devhacluster-tools'
INFO[0001] Creating node 'k3d-devhacluster-server-1'
INFO[0002] Creating node 'k3d-devhacluster-server-2'
INFO[0002] Creating node 'k3d-devhacluster-agent-0'
INFO[0002] Creating LoadBalancer 'k3d-devhacluster-serverlb'
INFO[0002] Using the k3d-tools node to gather environment information
INFO[0002] Starting new tools node...
INFO[0002] Starting Node 'k3d-devhacluster-tools'
INFO[0003] Starting cluster 'devhacluster'
INFO[0003] Starting the initializing server...
INFO[0004] Starting Node 'k3d-devhacluster-server-0'
INFO[0005] Starting servers...
INFO[0005] Starting Node 'k3d-devhacluster-server-1'
INFO[0027] Starting Node 'k3d-devhacluster-server-2'
INFO[0040] Starting agents...
INFO[0040] Starting Node 'k3d-devhacluster-agent-0'
INFO[0042] Starting helpers...
INFO[0042] Starting Node 'k3d-devhacluster-serverlb'
INFO[0049] Injecting records for hostAliases (incl. host.k3d.internal) and for 6 network members into CoreDNS configmap...
INFO[0051] Cluster 'devhacluster' created successfully!
INFO[0051] You can now use it like this:
kubectl cluster-info
(base) skondla@Sams-MBP:~ $ k get nodes -o wide
NAME                        STATUS   ROLES                       AGE    VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE   KERNEL-VERSION        CONTAINER-RUNTIME
k3d-devhacluster-agent-0    Ready    <none>                      76s    v1.26.4+k3s1   172.23.0.6    <none>        K3s dev    5.15.49-linuxkit-pr   containerd://1.6.19-k3s1
k3d-devhacluster-server-0   Ready    control-plane,etcd,master   109s   v1.26.4+k3s1   172.23.0.3    <none>        K3s dev    5.15.49-linuxkit-pr   containerd://1.6.19-k3s1
k3d-devhacluster-server-1   Ready    control-plane,etcd,master   92s    v1.26.4+k3s1   172.23.0.4    <none>        K3s dev    5.15.49-linuxkit-pr   containerd://1.6.19-k3s1
k3d-devhacluster-server-2   Ready    control-plane,etcd,master   79s    v1.26.4+k3s1   172.23.0.5    <none>        K3s dev    5.15.49-linuxkit-pr   containerd://1.6.19-k3s1
(base) skondla@Sams-MBP:~ $ k get po -o wide -A --all-namespaces
NAMESPACE         NAME                                         READY   STATUS      RESTARTS   AGE     IP          NODE                        NOMINATED NODE   READINESS GATES
kube-system       coredns-59b4f5bbd5-hkdm6                     1/1     Running     0          5m34s   10.42.0.5   k3d-devhacluster-server-0   <none>           <none>
kube-system       helm-install-traefik-crd-gphwk               0/1     Completed   0          5m34s   10.42.0.2   k3d-devhacluster-server-0   <none>           <none>
kube-system       helm-install-traefik-r8w4p                   0/1     Completed   1          5m34s   10.42.0.3   k3d-devhacluster-server-0   <none>           <none>
kube-system       local-path-provisioner-76d776f6f9-dlkfm      1/1     Running     0          5m34s   10.42.0.4   k3d-devhacluster-server-0   <none>           <none>
kube-system       metrics-server-7b67f64457-2mgv8              1/1     Running     0          5m34s   10.42.0.6   k3d-devhacluster-server-0   <none>           <none>
kube-system       svclb-traefik-cabd407d-jz4v5                 2/2     Running     0          5m23s   10.42.1.3   k3d-devhacluster-server-1   <none>           <none>
kube-system       svclb-traefik-cabd407d-lpn5n                 2/2     Running     0          5m23s   10.42.0.7   k3d-devhacluster-server-0   <none>           <none>
kube-system       svclb-traefik-cabd407d-rzqpb                 2/2     Running     0          5m14s   10.42.3.2   k3d-devhacluster-agent-0    <none>           <none>
kube-system       svclb-traefik-cabd407d-zgs5m                 2/2     Running     0          5m16s   10.42.2.2   k3d-devhacluster-server-2   <none>           <none>
kube-system       traefik-56b8c5fb5c-2mtmf                     1/1     Running     0          5m23s   10.42.1.2   k3d-devhacluster-server-1   <none>           <none>
rabbitmq-system   rabbitmq-cluster-operator-54b4bf5cbf-ghrrr   1/1     Running     0          11s     10.42.3.3   k3d-devhacluster-agent-0    <none>           <none>

Deploy operator

(base) skondla@Sams-MBP:~ $ curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/install.sh | bash -s v0.25.0
customresourcedefinition.apiextensions.k8s.io/catalogsources.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/clusterserviceversions.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/installplans.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/olmconfigs.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/operatorconditions.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/operatorgroups.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/operators.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/subscriptions.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/catalogsources.operators.coreos.com condition met
customresourcedefinition.apiextensions.k8s.io/clusterserviceversions.operators.coreos.com condition met
customresourcedefinition.apiextensions.k8s.io/installplans.operators.coreos.com condition met
customresourcedefinition.apiextensions.k8s.io/olmconfigs.operators.coreos.com condition met
customresourcedefinition.apiextensions.k8s.io/operatorconditions.operators.coreos.com condition met
customresourcedefinition.apiextensions.k8s.io/operatorgroups.operators.coreos.com condition met
customresourcedefinition.apiextensions.k8s.io/operators.operators.coreos.com condition met
customresourcedefinition.apiextensions.k8s.io/subscriptions.operators.coreos.com condition met
namespace/olm created
namespace/operators created
serviceaccount/olm-operator-serviceaccount created
clusterrole.rbac.authorization.k8s.io/system:controller:operator-lifecycle-manager created
clusterrolebinding.rbac.authorization.k8s.io/olm-operator-binding-olm created
olmconfig.operators.coreos.com/cluster created
deployment.apps/olm-operator created
deployment.apps/catalog-operator created
clusterrole.rbac.authorization.k8s.io/aggregate-olm-edit created
clusterrole.rbac.authorization.k8s.io/aggregate-olm-view created
operatorgroup.operators.coreos.com/global-operators created
operatorgroup.operators.coreos.com/olm-operators created
clusterserviceversion.operators.coreos.com/packageserver created
catalogsource.operators.coreos.com/operatorhubio-catalog created
Waiting for deployment "olm-operator" rollout to finish: 0 of 1 updated replicas are available...
deployment "olm-operator" successfully rolled out
deployment "catalog-operator" successfully rolled out
Package server phase: Succeeded
deployment "packageserver" successfully rolled out

查看namespace:

(base) skondla@Sams-MBP:~ $ k get ns
NAME                  STATUS   AGE
default               Active   21m
flaskapp1-namespace   Active   12m
kube-node-lease       Active   21m
kube-public           Active   21m
kube-system           Active   21m
olm                   Active   36s
operators             Active   36s
rabbitmq-system       Active   16m

部署Prometheus:

(base) skondla@Sams-MBP:~ $ kubectl create -f https://operatorhub.io/install/prometheus.yaml
subscription.operators.coreos.com/my-prometheus created
(base) skondla@Sams-MBP:~ $ kubectl get csv -n operators
NAME                       DISPLAY                        VERSION   REPLACES                   PHASE
elastic-cloud-eck.v2.8.0   Elasticsearch (ECK) Operator   2.8.0     elastic-cloud-eck.v2.7.0   Succeeded
(base) skondla@Sams-MBP:~ $
(base) skondla@Sams-MBP:~ $
(base) skondla@Sams-MBP:~ $
(base) skondla@Sams-MBP:~ $ kubectl get csv -n operators
NAME                         DISPLAY                        VERSION   REPLACES                    PHASE
elastic-cloud-eck.v2.8.0     Elasticsearch (ECK) Operator   2.8.0     elastic-cloud-eck.v2.7.0    Succeeded
prometheusoperator.v0.65.1   Prometheus Operator            0.65.1    prometheusoperator.0.47.0   Succeeded
(base) skondla@Sams-MBP:~ $ curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/install.sh | bash -s v0.25.0
OLM is already installed in olm namespace. Exiting...
(base) skondla@Sams-MBP:~ $ kubectl create -f https://operatorhub.io/install/grafana-operator.yaml
subscription.operators.coreos.com/my-grafana-operator created
(base) skondla@Sams-MBP:~ $ kubectl get csv -n operators
NAME                         DISPLAY                        VERSION   REPLACES                    PHASE
elastic-cloud-eck.v2.8.0     Elasticsearch (ECK) Operator   2.8.0     elastic-cloud-eck.v2.7.0    Succeeded
prometheusoperator.v0.65.1   Prometheus Operator            0.65.1    prometheusoperator.0.47.0   Succeeded
(base) skondla@Sams-MBP:~ $ kubectl get csv -n operators
NAME                         DISPLAY                        VERSION   REPLACES                    PHASE
elastic-cloud-eck.v2.8.0     Elasticsearch (ECK) Operator   2.8.0     elastic-cloud-eck.v2.7.0    Succeeded
prometheusoperator.v0.65.1   Prometheus Operator            0.65.1    prometheusoperator.0.47.0   Succeeded

部署Grafana

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: grafana
  name: grafana
spec:
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      securityContext:
        fsGroup: 472
        supplementalGroups:
          - 0
      containers:
        - name: grafana
          image: grafana/grafana:9.1.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3000
              name: http-grafana
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /robots.txt
              port: 3000
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 30
            successThreshold: 1
            timeoutSeconds: 2
          livenessProbe:
            failureThreshold: 3
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 3000
            timeoutSeconds: 1
          resources:
            requests:
              cpu: 250m
              memory: 750Mi
          volumeMounts:
            - mountPath: /var/lib/grafana
              name: grafana-pv
      volumes:
        - name: grafana-pv
          persistentVolumeClaim:
            claimName: grafana-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
spec:
  ports:
    - port: 3000
      protocol: TCP
      targetPort: http-grafana
  selector:
    app: grafana
  sessionAffinity: None
  type: LoadBalancer

启动代理

(base) skondla@Sams-MBP:grafana $ kubectl port-forward service/grafana 3000:3000
Forwarding from 127.0.0.1:3000 -> 3000
Forwarding from [::1]:3000 -> 3000
Handling connection for 3000

Grafana dashboard

73211f185722f9466a4e2ee912df1720.png
38ce92032673ee14c32af5d8d8b5edef.png
76f820825a0f103817ec0a41b6de35a2.png
b5b1f6e5447a077ea487586efd8b253c.png

文章翻译 https://kondlawork.medium.com/lightweight-kubernetes-k3s-on-local-machine-with-grafana-docker-5f5f8b514dfa

往期推荐

DevSecOps 管道: 使用Jenkins自动化CI/CD管道以实现安全的多语言应用程序

【开放视频+文档】Spinnaker多云持续部署实践

开放DevOps,ArgoCD,Terraform实践文档

Kubernetes Operator简介与构建

2024 - 推动DevOps 工程落地的领域相关工具

降低DevOps入门门槛,企业级实践,持续累计5年打造一套精品实践课程!邀共赏!

b0b492883f33abaadf365fab00cec9bf.png

遇到devops工程实践问题无从下手,圈内提问,400+同行共同探讨!邀共享!

eeec6411b11132ce69bad05458975cea.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值