openshift_ex280_v4_10_20240629210102 Flashcards
Cómo se limitan los recursos del deployment hello-world-nginx:v1.0 –image quay.io/redhattraining/hello-world-nginx:v1.0
minimo de recursos:
20 Mi
10m cpu
Maximo de recursos:
cpu: “80m”
memory: 100Mi
En yaml desde el atributo spec:
…output omitted…
spec:
containers:
- image: quay.io/redhattraining/hello-world-nginx:v1.0
name: hello-world-nginx
resources:
requests:
cpu: “10m”
memory: 20Mi
limits:
cpu: “80m”
memory: 100Mi
status: {}
Cómo se observan los límites de requests y limits de los nodos
oc describe node NAME
Cómo se muestra el uso real de todos los pods?
oc adm top pods
Cómo se muestra el uso de los nodos con role worker
oc adm top nodes -l node-role.kubernetes.io/worker
Recursos sobre los que una quota puede limitar en su conteo
Pods Replicationcontrollers services secrets persistentvolumeclaims
Recursos de cómputo que una quota puede restringir por recurso
requests. Cpu
requests. Memory
requests. Storage
Describe la sintaxis de cuota en yaml
nombre dev-quota
servicios a 10
cpu a 1300
memoria 1.5Gi
apiVersion: v1 kind: ResourceQuota metadata: name: dev-quota spec: hard: services: "10" cpu: "1300m" memory: "1.5Gi"
Cómo se crea un recurso desde un archivo FILE.yaml
oc create –save-config -f FILE.yaml
Cómo se crea una cuota dev-quota en cmd oc
servicios 10
cpu 1300m
memory 1.5Gi
oc create quota dev-quota –hard services=10,cpu=1300m,memory=1.5Gi
Cómo se obtienen las cuotas
oc get resourcequota
¿Qué comando se usa en OpenShift para describir los detalles de una cuota específica llamada NAME?
oc describe quota NAME
Cómo se elimina una cuota
oc delete resourcequota QUOTA
Como se coloca el label de un nodo ejemplo master01 etiqueta env a dev
oc label node master01 env=dev
Como se sobreescribe la etiqueta env a prod del nodo master01
oc label node master01 env=prod –overwrite
Como se quita la etiqueta env del nodo master01
oc label node master01 env-
Como se muestran los labels del nodo master02
oc get node master02 –show-labels
Como se obtienen los nodos que tienen la etiqueta env
oc get nodes -L env
Como puedo obtener la relación entre machine set y nodos
oc get machines -n openshift-machine-api -o wide
Como se puede editar el machineset ocp-qz7hf-worker-us-west-1b
oc edit machineset ocp-qz7hf-worker-us-west-1b \
> -n openshift-machine-api
Como se coloca en el deployment llamado myapp para que este solo se coloque en los nodos con el label env dev desde yaml desde el tag spec:
…output omitted…
spec:
…output omitted…
template:
metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
creationTimestamp: null
labels:
deployment: myapp
spec:
nodeSelector:
env: dev
containers:
- image: quay.io/redhattraining/scaling:v1.0
…output omitted…
nodeSelector:
env: dev
Como puedes colocar el label env dev con el comando oc patch
[user@host ~]$ oc patch deployment myapp –patch \
> ‘{“spec”:{“template”:{“spec”:{“nodeSelector”:{“env”:”dev”}}}}}’
Como se configura el node selector para el proyecto new-project llamado demo sobre los labels tier=1 con comandos de proyecto nuevo
oc adm new-project demo –node-selector “tier=1”
Como se sobreescribe el selector default del proyecto demo y que utilice “tier=2”
oc annotate namespace demo \
> openshift.io/node-selector=”tier=2” –overwrite
Como se escala el numero de replicas a 3 para el deployment my app
[user@host ~]$ oc scale –replicas 3 deployment/myapp
Como se pueden obtener los eventos de Warning
oc get events –fields-selector type=Warning
Como se pueden eliminar todos los recursos de la app hello-limit
oc delete all -l app=hello-limit
Cómo se limitan los recursos del deployment hello-world-nginx:v1.0 –image quay.io/redhattraining/hello-world-nginx:v1.0
requests=>
20 Mi
10m cpu
limits=>
cpu 80m
memory 100Mi
En linea de comandos
oc set resources deployment hello-world-nginx –requests cpu=10m,memory=20Mi –limits cpu=80m,memory=100Mi
Como se crea un deployment salvando el archivo en ~/DO280/labs/schedule-limit/hello-limit.yaml. Nombre hello-limit y usar la imagen quay.io/redhattraining/hello-world-nginx:v1.0.
oc create deployment hello-limit –image quay.io/redhattraining/hello-world-nginx:v1.0 –dry-run=client -o yaml > ~/DO280/labs/schedule-limit/hello-limit.yaml
Como se modifica el hello-limit.yaml para agregar
3 cpu
20Mi de memoria
spec:
containers:
- image: quay.io/redhattraining/hello-world-nginx:v1.0
name: hello-world-nginx
resources: {}
Se agrega
spec:
containers:
- image: quay.io/redhattraining/hello-world-nginx:v1.0
name: hello-world-nginx
resources:
requests:
cpu: “3”
memory: 20Mi
¿Qué comando se usa en OpenShift para aplicar la configuración especificada en el archivo hello-limit.yaml?
oc apply -f hello-limit.yaml
Como se escala a 4 deplicas el deployment hello-limit
oc scale –replicas 4 deployment/hello-limit
Como se especifica el label y las replicas 1 del deployment sscale en los contenedores del deployment
apiVersion: apps/v1
kind: Deployment
…output omitted…
spec:
replicas: 1
selector:
matchLabels:
deployment: scale
strategy: {}
template:
metadata:
labels:
deployment: scale
spec:
containers:
…output omitted…
Como se coloca un autoscale al deployment hello minimo 1 y maximo 10 con el cpu al 80
oc autoscale deployment/hello \
> –min 1 –max 10 –cpu-percent 80
Como obtienes los limites y requests y los muestras del pod loadtest-5f9565dbfb-jm9md
oc describe pod/loadtest-5f9565dbfb-jm9md | \
> grep -A2 -E “Limits|Requests”
Limits:
cpu: 100m
memory: 100Mi
Requests:
cpu: 25m
memory: 25Mi
Como se obtienen los horizontal pod scalers
oc get hpa/loadtest
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS …
loadtest Deployment/loadtest 0%/50% 2 10 2 …
Que significa hpa
Horizontal Pod Scaler
Que significa SDN
Openshift Software-defined networking
Cuales son los 5 requerimientos que satisface el SDN
Manejar tráfico de red programática mente
Manejar comunicación entre contenedores del mismo proyecto
Manejar comunicación entre pods del mismo u otro proyecto
Manejar comunicación se un pod a un servicio
Manejar comunicación entre una red externa a servicio o de contenedores a redes externas
Que es CNI
Container network interface
Como se crea un recurso desde un archivo todo.yaml
oc create -f todo.yaml
Como se copia un archivo llamado test.txt dentro del pod mypod a la ruta /tmp
oc cp test.txt mypod:/tmp
Como nos firmamos por ssh al pod mysql-73 con bash mysql-73-bdhfo1h-hhdj
oc rsh mysql-73-bdhfo1h-hhdj /bin/bash
Como se expone el servicio de la app frontend en el hostname todo.apps.ocp4.example.com
oc expose service/frontend –hostname todo.apps.ocp4.example.com
Como se validan los servicios expuestos
oc get routes
Como se ven los logs del pod frontend para corregir el problema de red
oc logs PODNAME
Como obtener ip de cluster del servicio frontend usando jsonpath
oc get service/frontend -o jsonpath=“{.spec.clusterIP}{‘\n’}”
Como se hace crea una imagen de debug del deployment MySQL imagen registry.access.redhat.com/ubi8/ubi:8.0
oc debug -t deployment/mysql –image registry.access.redhat.com/ubi8/ubi:8.0
Como se hace la validación de aplicación por curl al puerto 8080
curl -m 10 -v http://clusterIP:8080
Como nos conectamos a un pod por su ip privada
oc get pods -o wide -l name=frontend
debug pod -t deployment/ MySQL –image registry example
Como se obtienen los servicios
oc get svc
Como podemos ver la información del servicio frontend
oc describe svc/frontend
Como se ve la información de Labels y una linea posterior de despliegue
oc describe deployment/frontend | grep Labels -A1
Como se edita un servicio
oc edit svc/frontend
Como se modifica el selector name de un servicio
oc edit svc/frontend
Proceso completo para troubleshooting de red
- Crear deployments frontend/mysql y servicios
- Obtener logs de pod de app
- Obtener ip de mysql, debug a pod frontend, curl a mysql service
- Obtener ip de frontend, debug a pod mysql, curl a frontend
- Obtener ip interna de frontend, debug a pod mysql, curl a ipinterna y puerto interno.
- Describir servicio de frontend para mostrar el selector, endpoints
- Editar servicio frontend y cambiar selector por el correcto
- Prueba de url de servicio frontend
Estructura de servicio en yaml
kind: service
apiVersion: v1
metadata:
name: application-frontend
labels:
app: frontend-svc
spec:
ports:
- name: HTTP
protocol: TCP
port: 443
targetPort: 8443
selector:
app: shopping-cart
name: frontend
type:ClusterIP
Como se muestra el operador de dns
oc describe DNS.operator/default
Cuales son los servicios que DNS resuelve
A para servicios SRV port
Como obtener el cluster domain e ip
oc describe dns.operator/default
Status:
Cluster Domain: cluster.local
Cluster IP: 172.30.0.10
Como te puedes firmar al pod por ssh example-6c4984d949-7m26r
oc rsh example-6c4984d949-7m26r \
> curl hello.test.svc.cluster.local:8080
Que estructura de servicio crea CoreDNS por defecto
_port-name._port-protocol.svc-name.namespace.svc.cluster-domain.cluster-domain.
Ejemplo
_443-tcp._tcp.https.frontend.svc.cluster.local.
Que es OVN kubernetes
Open Virtual Network para kubernetes
Openshift SDN
OVN-kubernetes
Kuryr son ejemplos de
default network providers
Como se obtiene la configuracion del network cluster en yaml
oc get network/cluster -o yaml
apiVersion: config.openshift.io/v1
kind: Network
…output omitted…
spec:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
externalIP:
policy: {}
networkType: OpenshiftSDN
serviceNetwork:
- 172.30.0.0/16
…output omitted…
Que es CIDR
Classless Inter-Domain Routing
Como se diagnostica un error de red en dos pods frontend y mysql
oc expose service frontend –hostname todo.apps.ocp4.example.com
oc get routes
ver logs
oc logs frontend-57b8b445df-f56qh
App is ready at : 8080
Obtener IP de mysql
oc get service/mysql -o jsonpath=”{.spec.clusterIP}{‘\n’}”
Crear debug pod desde frontend app
oc debug -t deployment/frontend
Telnet hacia mysql
curl -v telnet://172.30.103.29:3306
——————————————
Obtener ip de frontend service
oc get service/frontend -o jsonpath=”{.spec.clusterIP}{‘\n’}”
Crear pod debug de mysql
oc debug -t deployment/mysql –image registry.access.redhat.com/ubi8/ubi:8.4
curl hacia aplicacion frontend
curl -m 10 -v http://172.30.23.147:8080
- Rebuilt URL to: http://172.30.23.147:8080/
- Trying 172.30.23.147…
- TCP_NODELAY set
- Connection timed out after 10000 milliseconds
- Closing connection 0
curl: (28) Connection timed out after 10000 milliseconds
Como obtener la ip privada de la app frontend para comprobar si el servicio esta abajo o es solo la red
oc get pods -o wide -l name=frontend
NAME READY STATUS RESTARTS AGE IP …
frontend-57b8b445df-f56qh 1/1 Running 0 39m 10.128.2.61 …
oc debug -t deployment/mysql –image registry.access.redhat.com/ubi8/ubi:8.4
curl -v http://10.128.2.61:8080/todo
- Trying 10.128.2.61…
- TCP_NODELAY set
- Connected to 10.128.2.61 (10.128.2.61) port 8080 (#0)
> GET /todo/ HTTP/1.1
> Host: 10.128.2.61:8080
> User-Agent: curl/7.61.1
> Accept: /
>< HTTP/1.1 200 OK
…output omitted…
Comprobar configuracion de frontsend service
oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend ClusterIP 172.30.23.147 8080/TCP 93m
mysql ClusterIP 172.30.103.29 3306/TCP 93m
[student@workstation network-sdn]$ oc describe svc/frontend
Name: frontend
Namespace: network-sdn
Labels: app=todonodejs
name=frontend
Annotations:
Selector: name=api
Type: ClusterIP
IP: 172.30.23.147
Port: 8080/TCP
TargetPort: 8080/TCP
Endpoints:
Session Affinity: None
Events:
oc describe deployment/frontend | \
> grep -A1 Labels
Labels: app=todonodejs
name=frontend
–
Labels: app=todonodejs
name=frontend
oc edit svc/frontend
[student@workstation network-sdn]$ oc describe svc/frontend
Name: frontend
Namespace: network-sdn
Labels: app=todonodejs
name=frontend
Annotations:
Selector: name=frontend
Type: ClusterIP
IP: 172.30.169.113
Port: 8080/TCP
TargetPort: 8080/TCP
Endpoints: 10.128.2.61:8080
Session Affinity: None
Events:
Como se forma un yaml de una ruta
kind: Route
apiVersion: route.openshift.io/v1
metadata:
name: a-simple-route 1
labels: 2
app: API
name: api-frontend
spec:
host: api.apps.acme.com 3
to:
kind: Service
name: api-frontend 4
port: 5
targetPort: 8443
Como se genera una ruta del servicio api-frontend con hostname api.apps.acme.com key api.key y cert
oc create route edge \
> –service api-frontend –hostname api.apps.acme.com \
> –key api.key –cert api.crt
Como se establece un certificado mountado desde un volumen en modo lectura
volumeMount:
- name: tls-certs
readOnly: true
mountPath: /usr/local/etc/ssl/ssl
- volumes:
- name: tls_certs
- secret:
- secretName:
Con que role debe de ejecutarse la SSCs
cluster-admin
Para que sirve sccs (security context constraints)
Limitar acceso de pods corriendo
Pods privilegiados Solicitar capacidades extra de contenedores Usar directorios de host como volúmenes Cambiar selinux de contenedor Cambiar id de usuario
Cuales son los 8 scc que provee openshift
hostaccess
hostmount-anyuid
hostnetwork
node-exporter
anyuid
nonroot
provileged
restricted
Como se puede obtener más información de un sccs
oc describe scc anyuid
Cómo se puede obtener los scc de un pod
oc describe pod console-5abcd -n project |grep scc
openshift.io/scc: restricted
oc get pod podname -o yaml | oc adm policy scc-subject-review -f -
Oc get modules
Listar los security context constraints que requiere el pod test para funcionar
oc get pod test -o yaml| oc adm policy scc-subject-review -f -
Que significa scc
Security context constraints
Como se agrega un contexto de seguridad a una cuenta de servicio
oc adm policy add-scc-to-user SCC -z serviceAccount
Como se puede corregir el scc del pod test usando el service account sa-test para el deployment test-app
oc get pod/test-app -o yaml| oc adm policy scc-subject-review -f -
oc create serviceaccount sa-test
oc adm policy add-scc-to-user anyuid -z sa-test
oc set serviceaccount deployment/test-app sa-test
Como se crea el secreto test desde una literal con la llave key1 y value1
oc create secret generic test –from-literal key1=value1
Como se crea la aplicación httpd con variables de ambiente ejemplo base de datos bd=db1 y instance=inst1 con la imagen httpd:2.2
oc new-app –name httpd -e bd=bd1 -e instance=inst1 httpd:2.2
Como se crea secreto de llaves de ssh TEST desde los dos archivos /tmp/id_rsa y /tmp/id_rsa.pub de rsa
oc create secret generic TEST –from-file id_rsa=/tmp/id_rsa
–from-file id_rsa.pub=/tmp/id_rsa.pub
Como se crea un secreto tls TESTTLS desde el cert /tmp/certificate y el key /tmp/key
oc create secret tls TESTTLS –cert /tmp/certificate –key /tmp/key
Como se crea un secreto DEMO-SECRET desde literal
root_password=zT1KTgk
user=demo-user
Como se coloca en el deployment config la referencia hacia el
oc create secret generic DEMO-SECRET –from-literal user=demo-user –from-literal root_password=zT1KTgk
Se hace referencia al secreto desde el deployment config
env:
- name: MYROOTPASS
valueFrom:
secretKeyRef:
name: demo-secret
key: root_password
Como puedes setear variables de ambiente de pod MYSQL usando el secreto demo-secret con key root_password en forma de yaml (edit)
oc edit
env:
- name: MYSQL
valueFrom:
secretKeyRef:
name: demo-secret
key: root_password
Como se agregan las variables de ambiente con environment env comando desde un secreto para un despliegue
oc set env deployment/demo –from secret/demo-secret —prefix MYSQL_
Como se cargan variables de ambiente desde un deployment config test
oc set env dc/mysql –prefix MYSQL_ –from test
Como se puede montar un secreto como un filesystem
demo-secret en ruta /app-secrets deployment demo
oc set volume deployment/demo —add —type secret —secret-name demo-secret —mount-path /app-secrets
Como se crea un config map test con llave key1 igual a value1
oc create configmap test —from-literal key1=value1
Como se modifica un config map y secreto test
oc extract secret/test -n openshift-config –to /tmp –confirm
oc set data secret/test-n openshift-config –from-file htpasswd=/tmp/htpasswd
Cual es la diferencia de un config map y un secreto
Secreto se encripta el Config map no
Como se actualiza el secret test desde el archivo /tmp/htpasswd
oc set data secret/test -n openshift-config –from-file /tmp/htpasswd
Como se crea una ruta y como se consume del aplicativo para ver las variables
oc expose service quotes —hostname quotes.apps.ocp4.example.com
oc get routes
Curl -v quotes.apps.ocp4.example.com
Como se coloca ambiente para un deployment configuration
oc set env dc/MySQL –prefix MYSQL_ –from secret/name
Como se crea un config map test desde el archivo /tmp/testconfig
oc create configmap NAME —from-file=/tmp/testconfig
Como se obtienen los config maps
oc get configmaps
Significado de user, identify, service account, group, role
User es identidad que interactúa con el API de openshift
Identity mantiene el registro de autenticaciones de usuario 1 a 1 connu
Como se administran los cluster-roles
oc adm policy
add-cluster-role-to-user
remove-cluster-role-from-user
who can
Cuales son los Roles de default
admin
basic-user
cluster-admin
cluster-status
edit
self-provisioner
view
Como se crea una alternativa para los roles de default (modo correcto de uso)
Export role
Import role con otro usuario
Explica todos los roles
admin puede manejar todos los proyectos y dar acceso
basic-user read project
cluster-admin súper user access to cluster resources full control to projects
cluster-status get cluster status
edit manejar aplicaciones pero no manejar recursos
self-provisioner crear proyectos - cluster role/not a project role
view can view project resources but can’t modify
Como se quita un cluster role de un usuario
oc adm policy remove-cluster-role-from-user ROLE USER
Como se válida que usuarios tiene permisos de eliminar
oc adm policy who-can delete user
Como se que usuarios puede obtener que usuarios pueden obtener pods
oc adm policy whocan get pods