He estado creando pods type:deployment
pero veo que algunos usos de documentación type:pod
, más específicamente la documentación para pods de contenedores múltiples :
apiVersion: v1
kind: Pod
metadata:
name: ""
labels:
name: ""
namespace: ""
annotations: []
generateName: ""
spec:
? "// See 'The spec schema' for details."
: ~
Pero para crear pods solo puedo usar un tipo de implementación :
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ""
spec:
replicas: 3
template:
metadata:
labels:
app: ""
spec:
containers:
etc
Noté que la documentación del pod dice:
El comando crear puede usarse para crear un pod directamente, o puede crear un pod o pods a través de una implementación. Se recomienda encarecidamente que utilice una implementación para crear sus pods. Vigila las vainas fallidas y pondrá en marcha nuevas vainas según sea necesario para mantener el número especificado. Si no desea que una Implementación monitoree su pod (por ejemplo, su pod está escribiendo datos no persistentes que no sobrevivirán a un reinicio, o su pod está destinado a ser muy breve), puede crear un pod directamente con El comando Crear.
Nota: Recomendamos usar una Implementación para crear pods. Debe usar las instrucciones a continuación solo si no desea crear una Implementación.
¿Pero esto plantea la pregunta de para qué kind:pod
sirve? ¿Puedes de alguna manera hacer referencia a pods en una implementación? No vi un camino. Parece que lo que obtienes con los pods son algunos metadatos adicionales, pero ninguna de las opciones de implementación, como replica
una política de reinicio. ¿De qué sirve un pod que no conserva datos, sobrevive a un reinicio? Creo que también podría crear un pod de contenedores múltiples con una implementación.
fuente
La respuesta de Radek es muy buena, pero me gustaría comentar desde mi experiencia, que casi nunca usarás un objeto con el pod amable , porque eso no tiene ningún sentido en la práctica.
Debido a que necesita un objeto de implementación , u otros objetos de la API de Kubernetes, como un controlador de replicación o un conjunto de réplicas , que necesita mantener vivas las réplicas (pods) (ese es el punto de usar kubernetes).
Lo que usará en la práctica para una aplicación típica son:
Objeto de implementación (donde especificará el contenedor / contenedores de sus aplicaciones) que alojará el contenedor de su aplicación con algunas otras especificaciones.
Objeto de servicio (que es como un objeto de agrupación y le da una llamada IP virtual (IP de clúster) para los
pods
que tienen una determinada etiqueta, y esospods
son básicamente los contenedores de aplicaciones que implementó con el objeto de implementación anterior ).Debe tener el objeto de servicio porque el objeto
pods
del despliegue se puede eliminar, escalar hacia arriba y hacia abajo, y no puede confiar en sus direcciones IP porque no serán persistentes.Por lo tanto, necesita un objeto como un servicio que les brinde a los
pods
IP una IP estable.Solo quería darle un poco de contexto
pods
, para que sepa cómo funcionan las cosas juntas.Espero que te aclare algunas cosas, no hace mucho que estaba en tus zapatos :)
fuente
kind: Pod
como ejemplo? Por ejemplo, Cómo consumir secretos como env vars: kubernetes.io/docs/concepts/configuration/secret/…helm test
) en el que no necesita ejecutar la aplicación para siempre, y no necesitamos múltiples réplicas, en ese caso el pod es adecuado.Kubernetes tiene tres tipos de objetos que debes conocer:
Vainas:
Despliegue:
Y estaría de acuerdo con otras respuestas, olvidarme de Pods y simplemente usar Deployment. ¿Por qué? Mire la segunda viñeta, monitorea el estado de cada pod, actualizando según sea necesario.
Entonces, en lugar de luchar con mensajes de error como este:
Así que simplemente refactorice o vuelva a crear completamente su Pod en una implementación que cree un pod para hacer lo que necesita hacer. Con la implementación, puede cambiar cualquier configuración que desee y no necesita preocuparse por ver ese mensaje de error.
fuente
Pod es instancia de contenedor.
Esa es la salida de
replicas: 3
Piense en uno
deployment
puede tener muchas instancias en ejecución (réplica).fuente
replicas: 3
referencias a la parte superior de la imagen, significa "oye, cuando ejecutes este proceso, crea 3 computadoras virtuales / reales - instancias". es como "despliegues" es un hogar y los "grupos" son personas. Una casa y tres personas adentro hacen el trabajo. ¿Qué estás tratando de hacer específico a esto?Pod es una colección de contenedores y objeto básico de Kuberntes. Todos los contenedores de pod se encuentran en el mismo nodo.
La implementación es un tipo de controlador en Kubernetes.
Controllers use a Pod Template that you provide to create the Pods for which it is responsible.
La implementación crea un ReplicaSet que, a su vez, se asegura de que CurrentReplicas siempre sea el mismo que el deseado.
Ventajas:
fuente
Quiero agregar información del libro Kubernetes In Action , para que pueda ver toda la imagen y la relación de conexión entre los recursos de Kubernetes como Pod, Deployment y ReplicationController (ReplicaSet)
son la unidad básica desplegable en Kubernetes. Pero en casos de uso del mundo real, desea que sus implementaciones se mantengan en funcionamiento automáticamente y se mantengan saludables sin ninguna intervención manual. Para esto, el enfoque recomendado es usar un Despliegue , que debajo del capó crea un ReplicaSet .
(ReplicaSet extiende un objeto antiguo llamado ReplicationController , que es exactamente el mismo pero sin el historial de revisión).
Un ReplicaSet monitorea constantemente la lista de pods en ejecución y se asegura de que el número de pods que coincidan con una determinada especificación siempre coincida con el número deseado.
es un recurso de nivel superior destinado a implementar aplicaciones y actualizarlas declarativamente.
Cuando crea una implementación , se crea un recurso ReplicaSet debajo (eventualmente más de ellos). ReplicaSets también replica y gestiona pods. Cuando se utiliza un despliegue, las vainas reales son creados y administrados por el despliegue ‘s ReplicaSets , no por el despliegue directamente
Pensemos en lo que ha sucedido. Al cambiar la plantilla de pod en su recurso de implementación, ha actualizado su aplicación a una versión más nueva, ¡cambiando un solo campo!
Finalmente, revierta una implementación a la revisión anterior o a cualquier revisión anterior tan fácil con el recurso de implementación.
Estas imágenes son del libro de Kubernetes In Action , también.
fuente
Intente evitar Pods e implemente Implementaciones para administrar contenedores, ya que los objetos de tipo Pod no se reprogramarán (ni se auto curarán) en caso de falla de un nodo o terminación del pod.
Una implementación es generalmente preferible porque define un ReplicaSet para garantizar que el número deseado de Pods esté siempre disponible y especifica una estrategia para reemplazar Pods, como RollingUpdate.
fuente
En kubernetes, las vainas son las unidades desplegables más pequeñas. Cada vez que creamos un objeto kubernetes como Deployments, replica-sets, statefulsets, daemonsets, crea un pod.
Como se mencionó anteriormente, las implementaciones crean módulos basados en el estado deseado mencionado en su objeto de implementación. Entonces, por ejemplo, desea 5 réplicas de una aplicación, que mencionó
replicas: 5
en su manifiesto de implementación. Ahora el controlador de implementación es responsable de crear 5 réplicas idénticas (no menos, no más) de la aplicación dada con todos los metadatos como la política RBAC, la política de redes, etiquetas, anotaciones, verificación de estado, cuotas de recursos, contaminación / tolerancias y otros, y asociarse con cada pod. crea.Hay algunos casos en los que desea crear un pod, por ejemplo, si está ejecutando un sidecar de prueba en el que no necesita ejecutar la aplicación para siempre, no necesita múltiples réplicas y ejecuta la aplicación cuando desea ejecutar en ese La vaina de la caja es adecuada. Por ejemplo
helm test
, que es una definición de pod que especifica un contenedor con un comando dado para ejecutar.fuente