🌟

k3s にHelmを使ってArgoCD環境を用意する

2024/12/03に公開

k3sと戯れていたので、その際の内容を記事にしたいと思います!

k3sインストールをする

vagrant を構築

$ vagrant up
$ vagrant ssh
$ sudo su

インストール

$ curl -sfL https://get.k3s.io | sh -
$ k3s kubectl get node
Lightweight Kubernetes
K3s is a highly available, certified Kubernetes distribution designed for production workloads in unattended…k3s.io

デプロイ

一度テストをするために適当なマニフェストファイルを作成して、適応してみたんですが、以下のようなエラーをはいていました。

Error: failed to create containerd container: get apparmor_parser version: exec: "apparmor_parser": executable file not found in $PATH

対応方法

$ zypper install zypper-aptitude
$ zypper install apparmor-parser
Upgrade to v0.21.0-k3s1r0, get CreateContainerError on all pods · Issue #702 · rancher/k3os
Version (k3OS / kernel) k3os version v0.21.0-k3s1r0 5.4.0–72-generic #80 SMP Tue May 4 19:31:44 UTC 2021 Architecture…github.com

helmの設定

基本的には下記に配置しています。いくつか実装を抜き出して紹介しようと思います。

実装

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: sample
  name: samepl
  namespace: {{ .Values.namespace.name }}
spec:
  replicas: {{ .Values.deployment.replicaCount }}
  selector:
    matchLabels:
      app: sample
  template:
    metadata:
      labels:
        app: sample
    spec:
      containers:
      - image: {{ .Values.image.repository }}:latest
        name: sample
        ports:
        - containerPort: {{ .Values.deployment.containerPort }}
        resources:
          requests:
            memory: {{ .Values.deployment.resources.requests.memory }}
            cpu: {{ .Values.deployment.resources.requests.CPU }}
          limits:
            memory: {{ .Values.deployment.resources.limits.memory }}
            cpu: {{ .Values.deployment.resources.limits.CPU }}
        livenessProbe:
          httpGet:
           path: {{ .Values.deployment.livenessProbe.path }}
           port: {{ .Values.deployment.livenessProbe.port }}
        readinessProbe:
          httpGet:
           path: {{ .Values.deployment.readinessProbe.path }}
           port: {{ .Values.deployment.readinessProbe.port }}
上書き用のファイル
// baseとなる上書き用ファイル
namespace:
  name: sandbox
 
image:
  repository: yosano/techtren // dockerhubに作ったサンプルのimage
  tag: latest
  pullPolicy: IfNotPresent
deployment:
  replicaCount: 1
  resources:
    requests:
      memory: 64Mi
      CPU: 250m
    limits: 
      memory: 128Mi
      CPU: 500m
  containerPort: 3111
  livenessProbe:
    path: /healthz
    port: 3111
  readinessProbe:
    path: /healthz
    port: 3111
service:
  port: 4111
  targetPort: 3111
  protocol: TCP
  type: ClusterIP
---
// もう一つの上書き用ファイル
namespace:
  name: staging
deployment:
  replicaCount: 3
  resources:
    requests:
      memory: 90Mi
      CPU: 300m
    limits: 
      memory: 128Mi
      CPU: 500m
  containerPort: 3111
service:
  port: 5111

Helm の使い方

このガイドでは、Helm を使用して Kubernetes クラスタ上のパッケージを管理する基本について説明します。 Helm クライアントが既に インストール済み であると 想定しています。…helm.sh

デプロイ

ArgoCDのインストール

serviceについては、vagrant からアクセスできるように変更しました。

Getting Started - Argo CD - Declarative GitOps CD for Kubernetes
Tip This guide assumes you have a grounding in the tools that Argo CD is based on. Please read understanding the basics…argoproj.github.io

デプロイ用マニフェストの適応

以下のファイルを作成し、 applyすればArgoCDのアプリケーションが作成されます。「source」で、「helm」を指定し、上書き用のファイルを指定しています。staging, production環境へのデプロイを切り替えなどは、「valueFiles」で指定するファイルを変えれば対応することができます。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: sample-app
  namespace: argocd
spec:
  destination:
    namespace: default
    server: https://kubernetes.default.svc
  project: default
  source:
    helm:
      valueFiles:
      - values-staging.yaml
    path: helm
    repoURL: https://github.com/sanoyo/cloud-native-tips
    targetRevision: HEAD

Discussion