$30 off During Our Annual Pro Sale. View Details »

Enjoying k8s cluster with Minikube and Helm

loftkun
April 08, 2019

Enjoying k8s cluster with Minikube and Helm

- My kubernetes environment and tools
 - kubectl 
 - Minikube
 - Helm
- Already tried Charts 
 - Istio
 - Prometheus/Alertmanager/PushGateway
 - Gitlab
- Create Original Chart 

loftkun

April 08, 2019
Tweet

More Decks by loftkun

Other Decks in Technology

Transcript

  1. Enjoying k8s cluster
    with
    Minikube and Helm
    2019/04/08 # node-1
    @loftkun

    View Slide

  2. @loftkun


    *(,! $
    • /'.
    • %% ==( 10" )==> WEBSRE
    • )0+-k8s#&

    View Slide


  3. "

    • !

    View Slide

  4. Check out
    my Qiita !
    minikube, helm




    [PR]

    View Slide

  5. Agenda
    • My k8s environment and tools
    • kubectl
    • Minikube
    • Helm
    • Already tried Charts
    • Create Original Chart

    View Slide

  6. My k8s cluster
    environments

    View Slide

  7. kubectl

    View Slide

  8. kubectl
    • + ('"()

    • ))&(

    )* %#
    !*'$)(
    !*'$)(
    '"((
    • &) "* $ $ (# ( '*) $ )% )"
    • GIB@J.()"7632L
    • $ $%, *( ( (%')*) %' ""$#(&(
    • ""$#(&( AGCHJ= 5/;:-7632L
    • 0<6849>6?DGEKF1:-L

    View Slide



  9. $ kubectl –h
    Advanced Commands:
    diff Diff live version against would-be applied version
    apply Apply a configuration to a resource by filename or stdin
    patch Update field(s) of a resource using strategic merge patch
    replace Replace a resource by filename or stdin
    wait Experimental: Wait for a specific condition on one or many resources.
    convert Convert config files between different API versions
    kustomize Build a kustomization target from a directory or a remote url.

    View Slide

  10. Minikube

    View Slide

  11. New features
    • v1.0.0 is released at 3/27 !




    • supports Kubernetes 1.14 by default
    • https://kubernetes.io/blog/2019/03/28/running-kubernetes-locally-on-linux-with-
    minikube-now-with-kubernetes-1.14-support/


    View Slide

  12. single-node ?
    • Minikube single-node Kubernetes cluster
    • V1.0.0README.md

    • https://github.com/kubernetes/minikube/commit/ec5ac30

    View Slide

  13. Become multi-node support !?
    • Roadmap (2019)

    • https://github.com/kubernetes/minikube/blob/master/docs/contributors/roadmap.md
    • #4 Support all Kubernetes features
    • Add multi-node support
    • minikube multi-node cluster

    View Slide

  14. Setup is Simple ! (on ubuntu 17.10)
    # download
    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
    sudo cp minikube /usr/local/bin && rm minikube

    View Slide

  15. Setup is Simple ! (on ubuntu 17.10)
    # download
    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
    sudo cp minikube /usr/local/bin && rm minikube
    # config as you like
    minikube config set cpus 12
    minikube config set memory 40960

    View Slide

  16. Setup is Simple ! (on ubuntu 17.10)
    # download
    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
    sudo cp minikube /usr/local/bin && rm minikube
    # config as you like
    minikube config set cpus 12
    minikube config set memory 40960
    # start cluster
    minikube start

    View Slide






  17. $ kubectl get no
    NAME STATUS ROLES AGE VERSION
    minikube Ready master 10m v1.14.0

    View Slide

  18. $ kubectl get no
    NAME STATUS ROLES AGE VERSION
    minikube Ready master 10m v1.14.0
    $ kubectl get svc -A
    NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    default kubernetes ClusterIP 10.96.0.1 443/TCP 10m
    kube-system kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 10m
    kube-system monitoring-grafana NodePort 10.107.133.92 80:30002/TCP 10m
    kube-system monitoring-influxdb ClusterIP 10.109.201.109 8083/TCP,8086/TCP 10m





    View Slide

  19. Be careful !
    • Minikube (VM)(&<3?2)
    "'0;24 %
    • Default
    • CPU21-9:<2GB5.2020GB)
    "
    • Spinnaker ( 9:<10GB ) ,57=/*%'9:<
    • 9:<)
    ")
    "
    • minikube config set 18>6#)
    ",
    • !+*&'0;24 !@
    • minikube delete $minikube start

    View Slide

  20. Tips of Minikube
    • minikubeCPU
    default2

    • https://qiita.com/loftkun/items/41ecde082778254de79a
    • minikube default2GB
    • https://qiita.com/loftkun/items/7400d5ae0e7b1fb7d26e
    • Spinnaker + Kayenta
    • https://qiita.com/loftkun/items/2fd1d598d04084495e2c

    View Slide

  21. Helm

    View Slide

  22. Overview
    • v2.13.0 is released at 2/27 !
    • https://github.com/helm/helm/releases
    • ! #
    • "!
    • 10.2/+!*%&)'-(%,$3
    • !!

    View Slide

  23. Helm Hub
    https://hub.helm.sh/

    View Slide

  24. Setup is Simple ! (on ubuntu 17.10)
    # download & install cli
    $ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash

    View Slide

  25. Setup is Simple ! (on ubuntu 17.10)
    # download & install cli
    $ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash
    # deploy tiller
    $ helm init

    View Slide

  26. Deploy a Chart (e.g. MongoDB)
    $ helm install stable/mongodb ¥
    --name my-mongo ¥
    --namespace my-mongo ¥
    --set mongodbRootPassword=pass,mongodbUsername=user1,mongodbPassword=pass1,mongodbDatabase=testdb

    View Slide

  27. Deploy a Chart (e.g. MongoDB)
    $ helm install stable/mongodb ¥
    --name my-mongo ¥
    --namespace my-mongo ¥
    --set mongodbRootPassword=pass,mongodbUsername=user1,mongodbPassword=pass1,mongodbDatabase=testdb
    $ kubectl get svc -n my-mongo
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    my-mongo-mongodb ClusterIP 10.97.82.12 27017/TCP 37s

    View Slide

  28. Deploy a Chart (e.g. MongoDB)
    $ helm install stable/mongodb ¥
    --name my-mongo ¥
    --namespace my-mongo ¥
    --set mongodbRootPassword=pass,mongodbUsername=user1,mongodbPassword=pass1,mongodbDatabase=testdb
    $ kubectl get svc -n my-mongo
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    my-mongo-mongodb ClusterIP 10.97.82.12 27017/TCP 37s
    $ kubectl get po -n my-mongo
    NAME READY STATUS RESTARTS AGE
    my-mongo-mongodb-5ccffd7cb4-tkrd8 1/1 Running 0 40s
    $

    View Slide

  29. Already tried
    Charts

    View Slide

  30. • Grafana
    • Gitlab-ce
    • Minio
    • MongoDB
    • MySQL
    • Prometheus
    • includes alertmanager, pushgateway
    • Spinnaker
    Already tried Charts
    • Istio
    • Kafka
    • GitLab
    • Cloud native images
    • https://docs.gitlab.com/ee/inst
    all/docker.html#cloud-native-
    images
    • loftkun ( )
    • abematv-comment-receiver
    charts/incubator charts/stable 3rd party repo

    View Slide

  31. • Grafana
    • Gitlab-ce
    • Minio
    • MongoDB
    • MySQL
    • Prometheus
    • includes alertmanager, pushgateway
    • Spinnaker
    Already tried Charts
    • Istio
    • Kafka
    • GitLab
    • Cloud native images
    • https://docs.gitlab.com/ee/inst
    all/docker.html#cloud-native-
    images
    • loftkun ( my original chart )
    • abematv-comment-receiver
    charts/incubator charts/stable 3rd party repo
    Today's
    Pickup

    View Slide

  32. charts/incubator/istio
    ( Don't use now )

    View Slide

  33. Be Careful !
    • #$ "% !(*
    • Istio.io ')&


    View Slide






  34. • $ helm fetch stable/spinnaker
    • $ helm template spinnaker-1.1.7.tgz > spinnaker-1.1.7.yaml

    View Slide


  35. • !$
    • $ helm fetch stable/spinnaker
    • $ helm template spinnaker-1.1.7.tgz > spinnaker-1.1.7.yaml

    $ # " !$
    • $ istioctl kube-inject -f ./spinnaker.yaml > ./spinnaker-injected.yaml

    View Slide


  36. • $%! )


    • $ helm fetch stable/spinnaker
    • $ helm template spinnaker-1.1.7.tgz > spinnaker-1.1.7.yaml
    • ) '$&$% )
    • $ istioctl kube-inject -f ./spinnaker.yaml > ./spinnaker-injected.yaml
    • "#(% )+,-*
    • $ kubectl apply -f ./spinnaker-injected.yaml

    View Slide

  37. Consepts

    View Slide

  38. Consepts
    • Proxy ( Envoy )
    • Pod

    • Automatic Manual

    View Slide

  39. Consepts
    • Pilot
    • SideCar
    • ! yaml
    • Route
    • blue/green deploy
    • canary release






    View Slide

  40. charts/stable/prometheus

    View Slide

  41. charts/stable/prometheus
    • 1Chart #%
    • Prometheus / Alertmanager / PushGateway
    • &" !$
    • Prometheus ------> Alertmanager
    • Prometheus ------> scrape targets
    • PushGateway
    • Node, Service, Pod,

    View Slide

  42. GitLab
    ( Cloud native images )

    View Slide

  43. Cloud native images
    • % $&#
    • $$!# #$ #$ "$ %
    $&
    #
    • *0'1 %##*0+).-1,
    • /(,
    • "$##$$
    • % $&#

    View Slide

  44. Create Original Chart

    View Slide

  45. Create New Chart
    $ helm create abematv-comment-receiver
    $ tree abematv-comment-receiver/
    abematv-comment-receiver/
    ├── charts
    ├── Chart.yaml
    ├── templates
    │ ├── deployment.yaml
    │ ├── _helpers.tpl
    │ ├── ingress.yaml
    │ ├── NOTES.txt
    │ ├── service.yaml
    │ └── tests
    │ └── test-connection.yaml
    └── values.yaml



    View Slide

  46. Fix Chart Info
    ( e.g. image repo, tag )
    $ vim abematv-comment-receiver/values.yaml
    $ cat abematv-comment-receiver/values.yaml
    image:
    repository: loftkun/abematv-comment-receiver
    tag: latest
    $ helm lint abematv-comment-receiver/
    ==> Linting abematv-comment-receiver/
    1 chart(s) linted, no failures
    $



    View Slide

  47. Deploy !
    $ helm install ./abematv-comment-receiver ¥
    --name abmtest ¥
    --namespace abmtest
    $ kubectl get po -n abmtest
    NAME READY STATUS RESTARTS AGE
    abmtest-abematv-comment-receiver 1/1 Running 0 43s
    $ kubectl logs –f ${podname} -n abmtest
    {"id":"wnBd8uUPeey6BwP8PkkWWS","message":"10"
    !#$ ","createdAtMs":1554630315263}







    View Slide

  48. loftkun/abematv-comment-receiver
    • ")16- %$&03%,05' $

    #)6+. "5(!$
    • )16- : *26/4( https://abema.tv/now-on-air/shogi )
    $ kubectl logs abmtest-abematv-comment-receiver-7775747d65-h8zs2 -n abmtest
    {"id":"XEfQoBeq3LU5Tq4kXTJZ5R","message":"360;?75","createdAtMs":1554630249431}
    {"id":"hn3gbIw0245r908JfrgOcN","message":"'/)<9!'"4-

    ,(
    81%.","createdAtMs":1554630274691}
    {"id":"hn3gbIw0245r908JfrgOmx","message":"> 2by","createdAtMs":1554630307015}
    {"id":"wnBd8uUPeey6BwP8PkkWWS","message":"10*+:! # $=&","createdAtMs":1554630315263}

    View Slide

  49. loftkun/abematv-comment-receiver
    • ,
    • &%+"%.231#*)%
    • MongoDB%!-#.23104/,#*)%

    'Kustomize# *$"(

    View Slide

  50. Tips of Helm
    • Helm
    • https://qiita.com/loftkun/items/853bbaabd4bf0fa96e9c
    • Pushgateway->Prometheus->Alertmanager->Webhook
    • https://qiita.com/loftkun/items/28cdf77ea9269e255a53


    GitLab
    • https://qiita.com/loftkun/items/c3945a2595e4f9c7ba09

    View Slide

  51. Appendix :
    other trying environments

    View Slide

  52. Appendix : other trying environments
    • &+"- )-$**
    • "+=4C;0B?>D1?/A
    • '#)')*#+'(
    • 0:2@ '#)83 8< 5;07
    • #* $,*+) < #,+$ ?9;0B6E
    • !++(*...'#)'%()',+*'#)*#+'(
    • '#)
    E'%('*'& ,)&+*=E
    • !++(* "+!,'%'#)'%('*'&#,)&+*

    View Slide




  53. View Slide