SO BASE: UBUNTU
echo "GitHub.github-vscode-theme
HashiCorp.terraform
HashiCorp.HCL
MS-CEINTL.vscode-language-pack-pt-BR
eamodio.gitlens
esbenp.prettier-vscode
ms-vscode.Theme-PredawnKit
ms-vscode.node-debug2
ms-vscode.vscode-typescript-next
ms-vscode.vscode-typescript-tslint-plugin
redhat.vscode-yaml" > vscode.list
sudo snap install code --classic
for i in `cat vscode.list` ; do code --install-extension $i --force ; done
OU
sudo snap install codium --classic
for i in `cat vscode.list` ; do codium --install-extension $i --force ; done
sudo snap install kubectl --classic
sudo snap install microk8s --classic
sudo microk8s status --wait-ready
sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
newgrp microk8s
alias mkctl='microk8s kubectl'
mkdir -p $HOME/.kube
sudo microk8s config > $HOME/.kube/config
O MicroK8s vem com sua própria versão do Kubectl para acessar o Kubernetes. Abaixo iremos abordar 3 formas diferentes de acesso para visualizar os "nodes" e "services":
Convencional
microk8s kubectl get nodes
NAME STATUS ROLES AGE VERSION
myuser Ready <none> 17m v1.19.3-34+a56971609ff35a
microk8s kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 33m
Alias
mkctl get nodes
NAME STATUS ROLES AGE VERSION
myuser Ready <none> 17m v1.19.3-34+a56971609ff35a
mkctl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 33m
Recomendada
kubectl get nodes
NAME STATUS ROLES AGE VERSION
myuser Ready <none> 17m v1.19.3-34+a56971609ff35a
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 33m
Observação: Como demonstrado, as 3 formas tem o mesmo resultado porem deste ponto em diante iremos utilizar apenas a "Recomendada" com o Kubectl.
kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-t4wlq 1/1 Running 0 33s
Por uma questão de minimalismo, o MicroK8s instala apenas o necessário para um funcionamento mínimo do Kubernetes.
Listar os Add-ons disponiveis
sudo microk8s status
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # Configure high availability on the current node
disabled:
ambassador # Ambassador API Gateway and Ingress
cilium # SDN, fast with full network policy
dashboard # The Kubernetes dashboard
dns # CoreDNS
fluentd # Elasticsearch-Fluentd-Kibana logging and monitoring
gpu # Automatic enablement of Nvidia CUDA
helm # Helm 2 - the package manager for Kubernetes
helm3 # Helm 3 - Kubernetes package manager
host-access # Allow Pods connecting to Host services smoothly
ingress # Ingress controller for external access
istio # Core Istio service mesh services
jaeger # Kubernetes Jaeger operator with its simple config
knative # The Knative framework on Kubernetes.
kubeflow # Kubeflow for easy ML deployments
linkerd # Linkerd is a service mesh for Kubernetes and other frameworks
metallb # Loadbalancer for your Kubernetes cluster
metrics-server # K8s Metrics Server for API access to service metrics
multus # Multus CNI enables attaching multiple network interfaces to pods
prometheus # Prometheus operator for monitoring and logging
rbac # Role-Based Access Control for authorisation
registry # Private image registry exposed on localhost:32000
storage # Storage class; allocates storage from host directory
Habilitar Add-ons
sudo microk8s enable dns ingress
Enabling DNS
Applying manifest
serviceaccount/coredns created
configmap/coredns created
deployment.apps/coredns created
service/kube-dns created
clusterrole.rbac.authorization.k8s.io/coredns created
clusterrolebinding.rbac.authorization.k8s.io/coredns created
Restarting kubelet
DNS is enabled
Enabling Ingress
namespace/ingress created
serviceaccount/nginx-ingress-microk8s-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-microk8s-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-microk8s-role created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-microk8s created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-microk8s created
configmap/nginx-load-balancer-microk8s-conf created
configmap/nginx-ingress-tcp-microk8s-conf created
configmap/nginx-ingress-udp-microk8s-conf created
daemonset.apps/nginx-ingress-microk8s-controller created
Ingress is enabled
Desabilitar Add-ons
sudo microk8s disable dns ingress
Disabling DNS
Reconfiguring kubelet
Removing DNS manifest
serviceaccount "coredns" deleted
configmap "coredns" deleted
deployment.apps "coredns" deleted
service "kube-dns" deleted
clusterrole.rbac.authorization.k8s.io "coredns" deleted
clusterrolebinding.rbac.authorization.k8s.io "coredns" deleted
DNS is disabled
Disabling Ingress
Error from server (NotFound): deployments.apps "default-http-backend" not found
Error from server (NotFound): services "default-http-backend" not found
Error from server (NotFound): serviceaccounts "nginx-ingress-microk8s-serviceaccount" not found
Error from server (NotFound): roles.rbac.authorization.k8s.io "nginx-ingress-microk8s-role" not found
Error from server (NotFound): rolebindings.rbac.authorization.k8s.io "nginx-ingress-microk8s" not found
Error from server (NotFound): configmaps "nginx-load-balancer-microk8s-conf" not found
Error from server (NotFound): daemonsets.apps "nginx-ingress-microk8s-controller" not found
namespace "ingress" deleted
serviceaccount "nginx-ingress-microk8s-serviceaccount" deleted
clusterrole.rbac.authorization.k8s.io "nginx-ingress-microk8s-clusterrole" deleted
role.rbac.authorization.k8s.io "nginx-ingress-microk8s-role" deleted
clusterrolebinding.rbac.authorization.k8s.io "nginx-ingress-microk8s" deleted
rolebinding.rbac.authorization.k8s.io "nginx-ingress-microk8s" deleted
configmap "nginx-load-balancer-microk8s-conf" deleted
configmap "nginx-ingress-tcp-microk8s-conf" deleted
configmap "nginx-ingress-udp-microk8s-conf" deleted
daemonset.apps "nginx-ingress-microk8s-controller" deleted
Ingress is disabled
O MicroK8s continuará em execução até que você decida interrompê-lo. Você pode parar e iniciar com os comandos abaixo:
sudo microk8s stop
Stopped.
sudo microk8s start
Started.
kubectl version --short=true
Client Version: v1.19.4
Server Version: v1.19.3-34+a56971609ff35a
kubectl cluster-info
Kubernetes master is running at https://192.168.254.100:16443
CoreDNS is running at https://192.168.254.100:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.254.100:16443
name: microk8s-cluster
contexts:
- context:
cluster: microk8s-cluster
user: admin
name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
user:
token: REDACTED
Observação: Para visualizar o token de acesso, utilize a opção "--flatten=true".
kubectl get nodes -w
NAME STATUS ROLES AGE VERSION
myuser Ready <none> 33h v1.19.3-34+a56971609ff35a
kubectl describe node myuser
O namespace fornece um escopo para nomes. O uso de vários namespaces é opcional.
kubectl get namespaces
OU
kubectl get ns
NAME STATUS AGE
kube-system Active 148m
kube-public Active 148m
kube-node-lease Active 148m
default Active 148m
ingress Active 146m
kubectl create namespace teste
OU
kubectl create ns teste
namespace/teste created
kubectl describe namespace teste
OU
kubectl describe ns teste
Name: teste
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource.
kubectl delete namespace teste
OU
kubectl delete ns teste
namespace "teste" deleted
Para crição de demais recursos de forma manual e por meo de YAML.