Helm CLI installation on Apple M1

Helm? is a package manager for Kubernetes. Helm uses a packaging format, this called “charts”.

Chart? is a collection of files, what be describe Kubernetes resources, like a Server, Database, Caches or simple deploy pod.

Check first first which version as lastest for ARM64 released : https://github.com/helm/helm/releases.

Installation Step

Run following console commands in command line. IMPORTANT! Don’t Forget replacing this LASTEST-RELEASE-HERE tag with latest release/version from https://github.com/helm/helm/releases. For example

  • Download your Helm CLI Binary
curl -O https://get.helm.sh/helm-LASTEST-RELEASE-HERE-darwin-arm64.tar.gz
  • Unpack it
tar -zxvf helm-LASTEST-RELEASE-HERE-linux-amd64.tar.gz
  • And Move it to bin location
sudo mv darwin-arm64/helm /usr/local/bin/helm

and, you should be able to run, check with this command and see the output

koray@MBP-von-Koray ~ % helm help
The Kubernetes package manager

Common actions for Helm:

- helm search:    search for charts
- helm pull:      download a chart to your local directory to view
- helm install:   upload the chart to Kubernetes
- helm list:      list releases of charts

Environment variables:

| Name                               | Description                                                                       |
|------------------------------------|-----------------------------------------------------------------------------------|
| $HELM_CACHE_HOME                   | set an alternative location for storing cached files.                             |
| $HELM_CONFIG_HOME                  | set an alternative location for storing Helm configuration.                       |
| $HELM_DATA_HOME                    | set an alternative location for storing Helm data.                                |
| $HELM_DEBUG                        | indicate whether or not Helm is running in Debug mode                             |
| $HELM_DRIVER                       | set the backend storage driver. Values are: configmap, secret, memory, postgres   |
........
......
.....

Example Steps with Today’s version

koray@MBP-von-Koray ~ % curl -O https://get.helm.sh/helm-v3.6.3-darwin-arm64.tar.gz
koray@MBP-von-Koray ~ % tar -zxvf helm-v3.6.3-darwin-arm64.tar.gz 
koray@MBP-von-Koray ~ % sudo mv darwin-arm64/helm /usr/local/bin/helm

Minikube on an Apple M1

Minikube? is local Kubernetes.

Kubernetes? is open source portable and flexible platform for managing containerized services, we have also declarative configuration and automation for services.

Docker Desktop on Apple M1

First thing, what we needed, it’s a Docker Desktop App for Apple Silicon.

Please check the Official Installation Guide, if installation steps changes has or new steps added..)

Docker Installation on Apple M1:

  • Download Docker Setup
  • Install Rosetta 2 Binaries
    • To install manually from the command line, run the following command
softwareupdate --install-rosetta

Important We Starting the Docker Desktop app after installation! (because i don’t did that!!!)

ok, so now docker desktop up and running…

Minikube

Minikube also has Official Installation Guide, please check the Official documentation, if the steps has changes or new steps added.

Why? because Docker and Minikube working ever day for integration for Apple Silicon, that means for us, the Installation Requirements or steps can be changes in the future.

Today’s minikube installation Steps, run following command in command line.

  • Download Minikube release
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
  • Install Minikube
sudo install minikube-darwin-amd64 /usr/local/bin/minikube

After Minikube Installation, we should be able to start minikube. Actually one drive supported. Its’a docker, that means, we must be the driver as argument for minikube start given.

minikube start --driver=docker

with this command, minikube will download kubernetes required docker images, this can take a little longer.

everything looks good and minikube working very well. Let’s starting we the dashboard.. for that run followed single command in command line.

minikube dashboard

and here is..

PHP 8 with Xdebug 3 on Apple M1

We can install Xdebug via pecl on MacOS with Homebrew. Paste that in terminal.

pecl install xdebug

And see if the php interpreter with Xdebug working:

d8devs@MBP-von-d8devs project % php -v
PHP 8.0.8 (cli) (built: Jul 12 2021 02:58:53) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies
with Xdebug v3.0.4, Copyright (c) 2002-2021, by Derick Rethans
with Zend OPcache v8.0.8, Copyright (c), by Zend Technologies

to correctly configuration Xdebug, locate (or create) section in php.ini file. Finding your currently php.ini location, type this in terminal: php --ini

Open the php.ini file.

vim /opt/homebrew/etc/php/8.0/php.ini

add it as follows at the last lines of file

; List of h....
.....
...

xdebug.mode = debug
xdebug.client = 127.0.0.1
xdebug.idekey = PHPSTORM
xdebug.start_with_request = yes

Enjoy! 😊

PHP 8 Installation on Mac M1 via homebrew

Install first homebrew, if it is not already installed. Paste that in macOS Terminal.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

And follow the ==> Next steps: after Installation add homebrew to your PATH

Actually Default Image for php from Brew Package Repository is a PHP 8. Here we can see that:

Thats means, we can simple install the php 8 in a macOS Terminal with this command brew install php, but we want to explicit install version 8, other versions can be declared as standard in the future. Paste that in terminal

brew install php@8.0

after that, you should be linked the installed php as system default php interpreter, for that run this command in terminal

brew link php

after restarting terminal, you must be see this output

d8devs@MBP-von-d8dev ~ % php -v
PHP 8.0.8 (cli) (built: Jul 12 2021 02:58:53) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.8, Copyright (c), by Zend Technologies

Enjoy 😉

Gitlab Installation WSL2 + Docker + Kubernetes + Helm 3

helm create gitlab gitlab/gitlab
kubectl create namespace gitlab

gitlab/values.yaml

## GitLab Edition
### ref: https://about.gitlab.com/products/
### - CE - Community Edition
### - EE - Enterprise Edition - (requires license issued by GitLab Inc)
###
edition: CE
#
### GitLab CE image
### ref: https://hub.docker.com/r/gitlab/gitlab-ce/tags/
###
ceImage: gitlab/gitlab-ce:9.1.2-ce.0

certmanager-issuer:
  email: me@myserver.com

## Enable persistence using Persistent Volume Claims
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
## ref: https://docs.gitlab.com/ce/install/requirements.html#storage
##
persistence:
  ## This volume persists generated configuration files, keys, and certs.
  ##
  gitlabEtc:
    enabled: true
    size: 1Gi
    ## If defined, volume.beta.kubernetes.io/storage-class: <storageClass>
    ## Default: volume.alpha.kubernetes.io/storage-class: default
    ##
    # storageClass:
    accessMode: ReadWriteOnce
  ## This volume is used to store git data and other project files.
  ## ref: https://docs.gitlab.com/omnibus/settings/configuration.html#storing-git-data-in-an-alternative-directory
  ##
  gitlabData:
    enabled: true
    size: 10Gi
    ## If defined, volume.beta.kubernetes.io/storage-class: <storageClass>
    ## Default: volume.alpha.kubernetes.io/storage-class: default
    ##
    # storageClass:
    accessMode: ReadWriteOnce
  gitlabRegistry:
    enabled: true
    size: 10Gi
    ## If defined, volume.beta.kubernetes.io/storage-class: <storageClass>
    ## Default: volume.alpha.kubernetes.io/storage-class: default
    ##
    # storageClass:

  postgresql:
    persistence:
      # storageClass:
      size: 10Gi
  ## Configuration values for the Redis dependency.
  ## ref: https://github.com/kubernetes/charts/blob/master/stable/redis/README.md
  ##
  redis:
    persistence:
      # storageClass:
      size: 10Gi


externalUrl: 'https://gitlab.local'

omnibusConfigRuby: |
  # This is example config of what you may already have in your omnibusConfigRuby object
  unicorn['worker_processes'] = 2;
  gitlab_rails['trusted_proxies'] = ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"];

  registry_external_url 'https://containerregistry.local';

  # These are the settings needed to support proxied SSL
  nginx['listen_port'] = 80
  nginx['listen_https'] = false
  nginx['proxy_set_headers'] = {
    "X-Forwarded-Proto" => "https",
    "X-Forwarded-Ssl" => "on"
  }
  registry_nginx['listen_port'] = 80
  registry_nginx['listen_https'] = false
  registry_nginx['proxy_set_headers'] = {
    "X-Forwarded-Proto" => "https",
    "X-Forwarded-Ssl" => "on"
  }

ingress:
  enabled: true
  annotations:
   kubernetes.io/ingress.class: nginx
   # kubernetes.io/tls-acme: 'true' Annotation used for letsencrypt support

  hosts:
    - gitlab.local
    - containerregistry.local

    ## gitlab Ingress TLS configuration
    ## Secrets must be created in the namespace, and is not done for you in this chart

#    tls:
#      - secretName: gitlab-tls
#        hosts:
#          - gitlab.local
#          - containerregistry.local
helm install --namespace=gitlab gitlab -f values.yaml gitlab/gitlab