Instalar Virtualbox en Debian 1.-Actualizar El Linux
Instalar Virtualbox en Debian 1.-Actualizar El Linux
2.-Instalar virtualbox
Instalar Docker.
3.- Instalar
The following packages were automatically installed and are no longer required:
libflashrom1 libftdi1-2
Instalar Minikube
Cambiar permisos y ubicación Minikube
minikube version
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.0/cri-
dockerd-v0.2.0-linux-amd64.tar.gz
$ wget
https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/
systemd/cri-docker.socket
$ systemctl daemon-reload
VERSION="v1.24.1"
curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$
{VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz
Instalar vim
Despues de instalación
Minikube ssh
Ls
Docker ps
Minikube ip
Minikube stop
Minikube delete
Kubectl –help
Kubectl get ns
Vim 01-pod.yaml
Manifiesto de un pod:
apiVersion: v1
kind: Pod
spec:
containers
- name: nginx
image: nginx:alpine
ps fax
apiVersion: v1
kind: Pod
spec:
containers
- name: nginx
image: nginx:alpine
env
- name : MI_VARIABLE
- value: “pelado”
- name MI_OTRA_VARIABLE
- value: “abel”
- name: DD_AGENT_HOST
- valueFrom
- fieldRef
- fieldPath: status.hostIP (obtener esa IP)
- resources
- requests: (siempre disponibles)
- memory: “64Mi”
- cpu: “200,” mil milicore es un core
- limits: (limites que puede utilizar de memoria)
- memory:”128Mi” ---si se pasa el kernel de Linux mata el proceso, si se mueren hay
que asignar mas memoria o crear copias del pod
- cpu: “500m”
- readinessProbe: de explicar a kubernetes que mi pod esta listo para recibir trafico
- httpGet:
- path: /
- port: 80
- initialDelaySeconds: 5
- periodSeconds: 10
- livenessProbe: (indicar que tu pod esta vivo)
- tcpSocket:
- port: 80
- initialDelaySeconds: 15
- periodSeconds: 20
- ports
- containerPort: 80
Deployments
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 (es la cantidad de pod que queremos en el deployment, un template para crear
pod)
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
env:
- name: MI_VARIABLE
value: "pelado"
- name: MI_OTRA_VARIABLE
value: "pelade"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
resources:
requests:
memory: "64Mi"
cpu: "200m"
limits:
memory: "128Mi"
cpu: "500m"
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 15
periodSeconds: 20
ports:
- containerPort: 80
Otra forma de hacer deployment es usando Daemon pero 1 solo pod por cada nodo, sirve para
servicios de monitoreo
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
env:
- name: MI_VARIABLE
value: "pelado"
- name: MI_OTRA_VARIABLE
value: "pelade"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
resources:
requests:
memory: "64Mi"
cpu: "200m"
limits:
memory: "128Mi"
cpu: "500m"
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 15
periodSeconds: 20
ports:
- containerPort: 80
POD con un statefulset, tienen un volumen, un directorio o un disco atado en ese pod, sirve
para base de datos.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-csi-app-set
spec:
selector:
matchLabels:
app: mypod
serviceName: "my-frontend"
replicas: 1
template:
metadata:
labels:
app: mypod
spec:
containers:
- name: my-frontend
image: busybox
args:
- sleep
- infinity
volumeMounts:
- mountPath: "/data"
name: csi-pvc
volumeClaimTemplates:
- metadata:
name: csi-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: do-block-storage
Agente calico, corre en cada nodo, crear rutas ip en cada instancia donde esta el pod que
corresponde con esa ip.
Servicios en kubernetes
Set de pods , contactar api, desde un pod hacia otro o desfde afuera del cluster
Cluster IP, ip fija dentro del cluster,funciona como un load balancer entre todos los pods donde
se asigne este servicio
Node Port, crear un puerto en cada nodo que va a recibir el trafico y lo va a mandar los pods
que quieras mandarlo.
apiVersion: v1
kind: Pod
metadata:
name: ubuntu
spec:
containers:
- name: ubuntu
image: ubuntu
args:
- sleep
- infinity
Random Pod
Hello Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 3
selector:
matchLabels:
role: hello
template:
metadata:
labels:
role: hello
spec:
containers:
- name: hello
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
ports:
- port: 8080
targetPort: 8080
selector:
role: hello (que pod van a ser los backend para estos servicios, redireccionar trafico a esta
etiqueta “hello” cada pod tiene su ip y cuando se elimina y asi vamos a llegar a todos los pod
mediante estas etiquetas)
kubectl geta ll
NODE PORT
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 3
selector:
matchLabels:
role: hello
template:
metadata:
labels:
role: hello
spec:
containers:
- name: hello
image: gcr.io/google-samples/hello-app:1.0
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
selector:
role: hello
puerto al internet
LOAD BALANCER
Mejor que el nodeport porque en este no hay que saber la ip de cada nodo para poder llegar a
cada servicio, sino que con una misma ip puedo llegar a todos los servicios
Cluster ip : crea una ip dentro del cluster privada no funciona desde afuera, y nos lleva a los
pod que queremos basados en etiquetas
Node port crea un servicio que encuentra los pods basados en etiquetas pero lo que hace es
crear un puerto en cada nodo que es publico y que puedes entrar desde afuera si tienes una ip
publica
Load balancer: encontrar pod basado en etiquetas, conecta nuestro cluster con el proveedor
de nube y crea un load balancer en aws, Google o azure que apunta a los nodos donde están
corriendo esos pods
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-app
spec:
rules:
- http:
paths:
- path: /v1
pathType: Prefix
backend:
service:
name: hello-v1
port:
number: 8080
- path: /v2
pathType: Prefix
backend:
service:
name: hello-v2
port:
number: 8080
CONFIGMAP
Cat /config/game.properties
SECRET
/env
Kustomization
Kustomize build
Stern hello-v1
INSTALAR HELM
nano install.yml
helm install miwordpress -f install.yml bitnami/wordpress
Mkdir mihelm
Cd mihelm/
Ls
Cd miappfyco/
Ls
Nano Chart.yaml
Nano values.yaml
frontReplicaCount: 3
backReplicaCount: 3
appTitle: Mi app
modificar templates
cd templates/
ls
rm hpa.yaml
rm service.yaml
ls
deployment.yaml
NOTES.txt
_helpers.tpl
cd test/
rm *¨
cd
nano NOTES.txt
cualquier cosa
nano _helpers.tpl
cualquier cosa
nano deployment.yaml
cd
ls