158 lines
5.5 KiB
Markdown
158 lines
5.5 KiB
Markdown
#### 1. Deployment with Resource Limits and Horizontal Pod Autoscaler
|
|
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: myapp
|
|
namespace: my-ns
|
|
labels:
|
|
app.kubernetes.io/name: myapp
|
|
app.kubernetes.io/env: development
|
|
spec:
|
|
replicas: 5
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: myapp
|
|
app.kubernetes.io/env: development
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: myapp
|
|
app.kubernetes.io/env: development
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
image: nginx # change image and apply again
|
|
resources:
|
|
limits:
|
|
memory: "128Mi"
|
|
cpu: "500m"
|
|
requests:
|
|
memory: "64Mi"
|
|
cpu: "250m"
|
|
ports:
|
|
- containerPort: 80
|
|
```
|
|
- `apiVersion: apps/v1`: Specifies the API version.
|
|
- `kind: Deployment`: Defines the object as a Deployment.
|
|
- `metadata`: Provides metadata for the Deployment.
|
|
- `name`: The name of the Deployment (`myapp`).
|
|
- `namespace`: The namespace where the Deployment will be created (`my-ns`).
|
|
- `labels`: Key-value pairs to categorize the Deployment.
|
|
- `spec`: Describes the desired state.
|
|
- `replicas`: Number of pod replicas (5).
|
|
- `selector`: Identifies the pods managed by this Deployment.
|
|
- `template`: The pod template used by the Deployment.
|
|
- `metadata`: Metadata for the pod template.
|
|
- `spec`: Describes the pod specification.
|
|
- `containers`: Defines the containers within the pod.
|
|
- `name`: The name of the container (`nginx`).
|
|
- `image`: The container image (`nginx`).
|
|
- `resources`: Resource limits and requests.
|
|
- `limits`: Maximum resources (`128Mi` memory, `500m` CPU).
|
|
- `requests`: Minimum resources (`64Mi` memory, `250m` CPU).
|
|
- `ports`: Container ports (80).
|
|
|
|
|
|
### 2. Deployment with Rolling Update Strategy
|
|
|
|
```yaml
|
|
apiVersion: extensions/v1beta1
|
|
kind: Deployment
|
|
metadata:
|
|
name: my-name
|
|
labels:
|
|
name: my-name
|
|
spec:
|
|
strategy:
|
|
rollingUpdate:
|
|
maxSurge: 1
|
|
maxUnavailable: 1
|
|
type: RollingUpdate
|
|
template:
|
|
metadata:
|
|
labels:
|
|
name: my-name
|
|
spec:
|
|
containers:
|
|
- image: ipedrazas/docmock
|
|
name: my-name
|
|
resources:
|
|
requests:
|
|
cpu: "20m"
|
|
memory: "55M"
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /_status/healthz
|
|
port: 5000
|
|
initialDelaySeconds: 90
|
|
timeoutSeconds: 10
|
|
readinessProbe:
|
|
httpGet:
|
|
path: /_status/healthz
|
|
port: 5000
|
|
initialDelaySeconds: 30
|
|
timeoutSeconds: 10
|
|
env:
|
|
- name: ENVVARNAME
|
|
value: ENVVARVALUE
|
|
ports:
|
|
- containerPort: 5000
|
|
name: my-name
|
|
volumeMounts:
|
|
- mountPath: /data
|
|
name: data
|
|
volumes:
|
|
- name: data
|
|
emptyDir: {}
|
|
restartPolicy: Always
|
|
imagePullPolicy: Always
|
|
```
|
|
- `apiVersion: extensions/v1beta1`: Specifies the API version.
|
|
- `kind: Deployment`: Defines the object as a Deployment.
|
|
- `metadata`: Provides metadata for the Deployment.
|
|
- `name`: The name of the Deployment (`my-name`).
|
|
- `labels`: Key-value pairs to categorize the Deployment.
|
|
- `spec`: Describes the desired state.
|
|
- `strategy`: Rolling update strategy.
|
|
- `rollingUpdate`: Defines the update strategy.
|
|
- `maxSurge`: Maximum number of additional pods (1).
|
|
- `maxUnavailable`: Maximum number of unavailable pods (1).
|
|
- `type`: The type of update strategy (`RollingUpdate`).
|
|
- `template`: The pod template used by the Deployment.
|
|
- `metadata`: Metadata for the pod template.
|
|
- `spec`: Describes the pod specification.
|
|
- `containers`: Defines the containers within the pod.
|
|
- `name`: The name of the container (`my-name`).
|
|
- `image`: The container image (`ipedrazas/docmock`).
|
|
- `resources`: Resource requests.
|
|
- `requests`: Minimum resources (`20m` CPU, `55M` memory).
|
|
- `livenessProbe`: Health check for the container.
|
|
- `httpGet`: HTTP GET request for the probe.
|
|
- `path`: The path to check (`/_status/healthz`).
|
|
- `port`: The port to check (5000).
|
|
- `initialDelaySeconds`: Initial delay before the probe starts (90 seconds).
|
|
- `timeoutSeconds`: Timeout for the probe (10 seconds).
|
|
- `readinessProbe`: Readiness check for the container.
|
|
- `httpGet`: HTTP GET request for the probe.
|
|
- `path`: The path to check (`/_status/healthz`).
|
|
- `port`: The port to check (5000).
|
|
- `initialDelaySeconds`: Initial delay before the probe starts (30 seconds).
|
|
- `timeoutSeconds`: Timeout for the probe (10 seconds).
|
|
- `env`: Environment variables for the container.
|
|
- `name`: The name of the environment variable (`ENVVARNAME`).
|
|
- `value`: The value of the environment variable (`ENVVARVALUE`).
|
|
- `ports`: Container ports.
|
|
- `containerPort`: The container port (5000).
|
|
- `name`: The name of the port (`my-name`).
|
|
- `volumeMounts`: Mounting volumes to the container.
|
|
- `mountPath`: The path to mount the volume (`/data`).
|
|
- `name`: The name of the volume (`data`).
|
|
- `volumes`: Defines the volumes.
|
|
- `name`: The name of the volume (`data`).
|
|
- `emptyDir`: An empty directory volume.
|
|
- `restartPolicy`: Restart policy for the container (`Always`).
|
|
- `imagePullPolicy`: Image pull policy (`Always`).
|
|
|