์ธ๋ถ(๋น๊ด๋ฆฌํ) PostgreSQL api/v2/instances๋ฅผ ์ฌ์ฉํ AWX ๋ฐฐํฌ ์์ฑ ํ ๊ฐ์ < ๋ณต์ ๋ณธ ํ์
kubectl ์ ์ฉ -f awx-deploy.yml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
namespace: awx
spec:
replicas: 2
image_version: 19.1.0
admin_user: admin
admin_password_secret: awx-admin-password
ingress_type: ingress
ingress_annotations: |
kubernetes.io/ingress.class: nginx
hostname: awx-demo.example.com
ingress_tls_secret: awx-ingress-tls
web_resource_requirements:
requests:
cpu: 400m
memory: 2Gi
limits:
cpu: 1000m
memory: 4Gi
task_resource_requirements:
requests:
cpu: 250m
memory: 1Gi
limits:
cpu: 500m
memory: 2Gi
ee_resource_requirements:
requests:
cpu: 250m
memory: 1Gi
limits:
cpu: 500m
memory: 2Gi
---
apiVersion: v1
kind: Secret
metadata:
name: awx-postgres-configuration
namespace: awx
stringData:
host: XXXX
port: "XXXX"
database: XXX
username: XXX
password: XXX
type: unmanaged
type: Opaque
2๊ฐ์ ์ธ์คํด์ค๊ฐ ์๋ AWX HA ๊ตฌ์ฑ
API/v2/ํ/
{
"ha": false,
"version": "19.1.0",
"active_node": "awx-5776c59677-h9mrj",
"install_uuid": "ba8b8bc6-1010-4e09-b5b2-08cc06901800",
"instances": [
{
"node": "awx-5776c59677-h9mrj",
"uuid": "5b18352d-24e7-47ce-a18d-e0e4cbd994d5",
"heartbeat": "2021-07-09T09:09:26.165742Z",
"capacity": 0,
"version": "19.1.0"
}
],
"instance_groups": [
{
"name": "tower",
"capacity": 0,
"instances": []
}
]
}
API/v2/์ธ์คํด์ค/
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"type": "instance",
"url": "/api/v2/instances/1/",
"related": {
"jobs": "/api/v2/instances/1/jobs/",
"instance_groups": "/api/v2/instances/1/instance_groups/"
},
"uuid": "5b18352d-24e7-47ce-a18d-e0e4cbd994d5",
"hostname": "awx-5776c59677-h9mrj",
"created": "2021-07-09T09:08:31.072893Z",
"modified": "2021-07-09T09:09:26.165742Z",
"capacity_adjustment": "1.00",
"version": "19.1.0",
"capacity": 0,
"consumed_capacity": 0,
"percent_capacity_remaining": 0.0,
"jobs_running": 0,
"jobs_total": 0,
"cpu": 0,
"memory": 0,
"cpu_capacity": 0,
"mem_capacity": 0,
"enabled": true,
"managed_by_policy": true
}
]
}
kubectl ํฌ๋ ๊ฐ์ ธ์ค๊ธฐ -n awx
์ด๋ฆ ์ค๋น ์ํ ๋ค์ ์์ ์ฐ๋ น
awx-5776c59677-74964 4/4 ๋ฌ๋ 0 14m
awx-5776c59677-h9mrj 4/4 ๋ฌ๋ 0 14m
kubectl exec pod/awx-5776c59677-74964 -n awx -c awx-web -it -- /bin/bash
bash-4.4$ awx-check_db ๊ด๋ฆฌ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ : x86_64-pc-linux-gnu์ PostgreSQL 12.7(Ubuntu 12.7-1.pgdg18.04+1), gcc๋ก ์ปดํ์ผ(Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64๋นํธ
kubectl ๋ก๊ทธ -n awx pod/awx-5776c59677-74964 -c awx-task
...
๋ด ํ์ผ "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/managers.py", 107ํ
raise RuntimeError("ํ์ฌ ํด๋ฌ์คํฐ ํธ์คํธ ID๋ก ์ธ์คํด์ค๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค")
RuntimeError: ํ์ฌ ํด๋ฌ์คํฐ ํธ์คํธ ID๋ก ์ธ์คํด์ค๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
2021-07-09 09:17:27,304 ์ ๋ณด ์ข
๋ฃ๋จ: ์ฝ๋ฐฑ ์์ ๊ธฐ(์ข
๋ฃ ์ํ 1, ์์๋์ง ์์)
...
๊ด๋ฆฌ๋๋ PostgreSQL์์๋ ๊ทธ๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋์ง ์์์ต๋๋ค.
๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ํ
kubectl ๋กค์์ ๋ค์ ์์ -n awx ๋ฐฐํฌ/awx
kubectl ํฌ๋ ๊ฐ์ ธ์ค๊ธฐ -n awx
์ด๋ฆ ์ค๋น ์ํ ๋ค์ ์์ ์ฐ๋ น
awx-686dd7df69-52kgh 4/4 ๋ฌ๋ 0 4m26s
awx-686dd7df69-v8w2g 4/4 ์คํ 0 4m23s
API/v2/ํ/
{
"ha": true,
"version": "19.1.0",
"active_node": "awx-686dd7df69-52kgh",
"install_uuid": "ba8b8bc6-1010-4e09-b5b2-08cc06901800",
"instances": [
{
"node": "awx-686dd7df69-52kgh",
"uuid": "ea773db2-7007-47a8-9987-16ddc79d6ec3",
"heartbeat": "2021-07-09T09:33:46.787935Z",
"capacity": 0,
"version": "19.1.0"
},
{
"node": "awx-686dd7df69-v8w2g",
"uuid": "acef28b0-3977-4dbe-8c10-e9c4f11adab8",
"heartbeat": "2021-07-09T09:33:52.378214Z",
"capacity": 0,
"version": "19.1.0"
}
],
"instance_groups": [
{
"name": "tower",
"capacity": 0,
"instances": []
}
]
}
API/v2/์ธ์คํด์ค/
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": 3,
"type": "instance",
"url": "/api/v2/instances/3/",
"related": {
"jobs": "/api/v2/instances/3/jobs/",
"instance_groups": "/api/v2/instances/3/instance_groups/"
},
"uuid": "ea773db2-7007-47a8-9987-16ddc79d6ec3",
"hostname": "awx-686dd7df69-52kgh",
"created": "2021-07-09T09:33:46.194006Z",
"modified": "2021-07-09T09:33:46.787935Z",
"capacity_adjustment": "1.00",
"version": "19.1.0",
"capacity": 0,
"consumed_capacity": 0,
"percent_capacity_remaining": 0.0,
"jobs_running": 0,
"jobs_total": 0,
"cpu": 0,
"memory": 0,
"cpu_capacity": 0,
"mem_capacity": 0,
"enabled": true,
"managed_by_policy": true
},
{
"id": 4,
"type": "instance",
"url": "/api/v2/instances/4/",
"related": {
"jobs": "/api/v2/instances/4/jobs/",
"instance_groups": "/api/v2/instances/4/instance_groups/"
},
"uuid": "acef28b0-3977-4dbe-8c10-e9c4f11adab8",
"hostname": "awx-686dd7df69-v8w2g",
"created": "2021-07-09T09:33:51.780698Z",
"modified": "2021-07-09T09:33:52.378214Z",
"capacity_adjustment": "1.00",
"version": "19.1.0",
"capacity": 0,
"consumed_capacity": 0,
"percent_capacity_remaining": 0.0,
"jobs_running": 0,
"jobs_total": 0,
"cpu": 0,
"memory": 0,
"cpu_capacity": 0,
"mem_capacity": 0,
"enabled": true,
"managed_by_policy": true
}
]
}
๋์ค์ 3๊ฐ์ ๋ณต์ ๋ณธ์ผ๋ก ํ์ฅํ๋ฉด ๋ฌธ์ ๋ ๋์ผํ์ง๋ง ๋ค์์ ์ฌ์ฉํ์ฌ ํด๊ฒฐ๋ฉ๋๋ค.
kubectl ๋กค์์ ๋ค์ ์์ -n awx ๋ฐฐํฌ/awx
์ด์์ ๋ฐ ์ปจํ ์ด๋ ๋ก๊ทธ ํ์ผ
@tchellomello @rooftopcellist ๋ค์ ์ฃผ์ ๋ ๋ถ ์ค ํ ๋ถ์๊ฒ ์๊ฐ์ด ์๋ค๋ฉด ์ด๊ฒ์ ๋ํด ์กฐ์ฌํ๋ ๊ฒ์ ๋์์ฃผ์๊ฒ ์ต๋๊น?
ํ์ํ ๊ฒฝ์ฐ ๋ช ์๊ฐ ๋์ API์ ๋ํ kubeconfig ๋ฐ ์ธ๋ถ IP๋ฅผ ์ฌํํ๊ณ ์ ๊ณตํ ์ ์์ต๋๋ค.
๋ด ์ชฝ์์ ์ธ๋ถ DB๋ก ๋๋ฅผ ์ํด ์ผํ์ง๋ง ์กฐ๊ธ ๋ ํํค์ณ ๋ณด๊ฒ ์ต๋๋ค.
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
X-API-Node: awx-toca-657778f5cb-7pdrp
X-API-Product-Name: AWX
X-API-Product-Version: 19.2.2
X-API-Time: 0.023s
{
"ha": true,
"version": "19.2.2",
"active_node": "awx-toca-657778f5cb-7pdrp",
"install_uuid": "e27ea7cb-c400-45fe-a595-9bb5217c71ac",
"instances": [
{
"node": "awx-toca-657778f5cb-7pdrp",
"uuid": "3a34f8fe-8336-4910-8c47-7193694a9536",
"heartbeat": "2021-07-10T19:35:26.186881Z",
"capacity": 296,
"version": "19.2.2"
},
{
"node": "awx-toca-657778f5cb-lm776",
"uuid": "fab5cf31-ae1d-4ddc-8b55-459618c20845",
"heartbeat": "2021-07-10T19:35:52.645367Z",
"capacity": 293,
"version": "19.2.2"
}
],
"instance_groups": [
{
"name": "tower",
"capacity": 0,
"instances": []
},
{
"name": "controlplane",
"capacity": 589,
"instances": [
"awx-toca-657778f5cb-7pdrp",
"awx-toca-657778f5cb-lm776"
]
},
{
"name": "default",
"capacity": 0,
"instances": []
}
kubectl get pods -w | grep awx-toca 15:35:01
awx-toca-657778f5cb-7pdrp 4/4 Running 0 2d14h
awx-toca-657778f5cb-lm776 0/4 Pending 0 0s
awx-toca-657778f5cb-lm776 0/4 Pending 0 0s
awx-toca-657778f5cb-lm776 0/4 Init:0/1 0 0s
awx-toca-657778f5cb-lm776 0/4 PodInitializing 0 1s
awx-toca-657778f5cb-lm776 4/4 Running 0 23s
[awx-toca-657778f5cb-lm776 awx-toca-web] 2021-07-10 19:36:00,757 INFO [-] awx.main.consumers client 'specific.d10caed53de54b76b34bc914c0ab92b6!290a7011729a4e5b8558e9519d1afd95' joined the broadcast group.
[awx-toca-657778f5cb-lm776 awx-toca-web] 2021-07-10 19:36:00,757 INFO [-] awx.main.consumers client 'specific.d10caed53de54b76b34bc914c0ab92b6!290a7011729a4e5b8558e9519d1afd95' joined the broadcast group.
[awx-toca-657778f5cb-lm776 awx-toca-web] 2021-07-10 19:36:00,757 INFO client 'specific.d10caed53de54b76b34bc914c0ab92b6!290a7011729a4e5b8558e9519d1afd95' joined the broadcast group.
[awx-toca-657778f5cb-lm776 awx-toca-web] RESULT 2
image_version=19.1.0์ผ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
19.2.2๋ก ์๋ํ์ง๋ง 2๊ฐ์ ๋ณต์ ๋ณธ ์์ฑ์ ์ฑ๊ณตํ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ณต์ ๋ณธ์ ์ค์ ํ๋ ๊ฒฝ์ฐ: 3(2์์ 3์ผ๋ก ํ์ฅ)
kubectl apply -f awx-deploy.yml
API/v2/ํ/
{
"ha": false,
"version": "19.2.2",
"active_node": "awx-848f64cdb4-29pcv",
"install_uuid": "88b63b97-2942-49c5-bc5f-e5006a7b5456",
"instances": [
{
"node": "awx-848f64cdb4-spt82",
"uuid": "27494bf7-6fa2-489e-bdb3-82466edbd49c",
"heartbeat": "2021-07-12T09:48:24.680690Z",
"capacity": 79,
"version": "19.2.2"
}
],
"instance_groups": [
{
"name": "controlplane",
"capacity": 79,
"instances": [
"awx-848f64cdb4-spt82"
]
},
{
"name": "default",
"capacity": 0,
"instances": []
}
]
}
kubectl rollout restart -n awx deployment/awx
API/v2/ํ/
{
"ha": true,
"version": "19.2.2",
"active_node": "awx-657cd5b84-t5htk",
"install_uuid": "88b63b97-2942-49c5-bc5f-e5006a7b5456",
"instances": [
{
"node": "awx-657cd5b84-g8kx2",
"uuid": "30e28fc4-8c88-4922-a7e1-0196fe790f2f",
"heartbeat": "2021-07-12T10:00:33.162404Z",
"capacity": 79,
"version": "19.2.2"
},
{
"node": "awx-657cd5b84-rg9v4",
"uuid": "501a0ff7-9043-46f4-baae-4602de3107d2",
"heartbeat": "2021-07-12T10:00:36.591979Z",
"capacity": 79,
"version": "19.2.2"
},
{
"node": "awx-657cd5b84-t5htk",
"uuid": "a3308acc-04e9-4da7-88cf-71048d666ffb",
"heartbeat": "2021-07-12T10:00:38.958448Z",
"capacity": 79,
"version": "19.2.2"
}
],
"instance_groups": [
{
"name": "controlplane",
"capacity": 237,
"instances": [
"awx-657cd5b84-g8kx2",
"awx-657cd5b84-rg9v4",
"awx-657cd5b84-t5htk"
]
},
{
"name": "default",
"capacity": 0,
"instances": []
}
]
}
replicas:2
์ด๊ฒ์ AWX API์ ์ถ๋ ฅ์ด์์ต๋๋ค.
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
X-API-Node: awx-toca-657778f5cb-lm776
X-API-Product-Name: AWX
X-API-Product-Version: 19.2.2
X-API-Time: 0.015s
{
"ha": true,
"version": "19.2.2",
"active_node": "awx-toca-657778f5cb-lm776",
"install_uuid": "e27ea7cb-c400-45fe-a595-9bb5217c71ac",
"instances": [
{
"node": "awx-toca-657778f5cb-4bzps",
"uuid": "617ccf03-2231-44ef-b512-7b97d3207feb",
"heartbeat": "2021-07-25T03:09:29.263282Z",
"capacity": 293,
"version": "19.2.2"
},
{
"node": "awx-toca-657778f5cb-lm776",
"uuid": "fab5cf31-ae1d-4ddc-8b55-459618c20845",
"heartbeat": "2021-07-25T03:09:49.130909Z",
"capacity": 293,
"version": "19.2.2"
}
],
"instance_groups": [
{
"name": "tower",
"capacity": 0,
"instances": []
},
{
"name": "controlplane",
"capacity": 586,
"instances": [
"awx-toca-657778f5cb-4bzps",
"awx-toca-657778f5cb-lm776"
]
},
{
"name": "default",
"capacity": 0,
"instances": []
}
]
}
๊ทธ๋ฐ ๋ค์ ์์ AWX ์คํ kubectl edit awx awx-toca
๋ฐ ์ค์ replicas:3
์ป์ 3 ์์๋๋ก :
kubectl get pods -w | grep awx 23:10:10
awx-operator-df789fd9c-rqn2k 1/1 Running 0 32h
awx-toca-657778f5cb-4bzps 4/4 Running 0 32h
awx-toca-657778f5cb-lm776 4/4 Running 78 14d
awx-toca-657778f5cb-28fq9 0/4 Pending 0 0s
awx-toca-657778f5cb-28fq9 0/4 Pending 0 0s
awx-toca-657778f5cb-28fq9 0/4 Init:0/1 0 0s
awx-toca-657778f5cb-28fq9 0/4 PodInitializing 0 2s
awx-toca-657778f5cb-28fq9 4/4 Running 0 4s
API๋ฅผ ์ดํด๋ณด๋ฉด ์์๋๋ก ์๋ํ์ต๋๋ค.
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
X-API-Node: awx-toca-657778f5cb-4bzps
X-API-Product-Name: AWX
X-API-Product-Version: 19.2.2
X-API-Time: 0.014s
{
"ha": true,
"version": "19.2.2",
"active_node": "awx-toca-657778f5cb-4bzps",
"install_uuid": "e27ea7cb-c400-45fe-a595-9bb5217c71ac",
"instances": [
{
"node": "awx-toca-657778f5cb-28fq9",
"uuid": "7801777c-93de-416f-841e-0eb9a1b721d2",
"heartbeat": "2021-07-25T03:10:55.501238Z",
"capacity": 296,
"version": "19.2.2"
},
{
"node": "awx-toca-657778f5cb-4bzps",
"uuid": "617ccf03-2231-44ef-b512-7b97d3207feb",
"heartbeat": "2021-07-25T03:11:29.447748Z",
"capacity": 293,
"version": "19.2.2"
},
{
"node": "awx-toca-657778f5cb-lm776",
"uuid": "fab5cf31-ae1d-4ddc-8b55-459618c20845",
"heartbeat": "2021-07-25T03:10:49.231003Z",
"capacity": 293,
"version": "19.2.2"
}
],
"instance_groups": [
{
"name": "tower",
"capacity": 0,
"instances": []
},
{
"name": "controlplane",
"capacity": 882,
"instances": [
"awx-toca-657778f5cb-28fq9",
"awx-toca-657778f5cb-4bzps",
"awx-toca-657778f5cb-lm776"
]
},
{
"name": "default",
"capacity": 0,
"instances": []
}
]
}
์๋์ผ๋ก ์คํ๋ ๋ชจ๋ kubecl scale --replicas
๋ช
๋ น์ ์ด์์์ ์ํด ๋ฌด์๋ฉ๋๋ค. ๋ชจ๋ ๋ณ๊ฒฝ์ AWX ์ฌ์์์ ์ง์ ์ํํด์ผ ํฉ๋๋ค. @tklsnk ๋ฅผ ์ฌํํ ์ ์์ผ๋ฏ๋ก ํ์ฅํ๊ธฐ ์ํด ์ํํ ๋จ๊ณ๋ฅผ ํ์ธํ ์ ์์ต๋๊น?
๋ณต์ ๋ณธ=2๋ก ๋ฐฐํฌํ ํ awx-deploy.yml(๋ณต์ ๋ณธ=3 ์ค์ )์ ํธ์งํ๊ณ kubectl apply -f awx-deploy.yml์ ์คํํฉ๋๋ค.
@tklsnk ์, ์ฌ๊ธฐ์์ ๋ด๊ฐ ํ ์ผ์ด์ง๋ง ๋์ผํ ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ต๋๋ค.
๋ค๋ฅธ k8 ํด๋ฌ์คํฐ๋ก ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
๋ค๋ฅธ k8 ํด๋ฌ์คํฐ๋ก ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
์ด @tklsnk์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์ฃ์กํฉ๋๋ค. ์์ง ์๋ํ ๊ธฐํ๊ฐ ์์์ต๋๋ค. ์ด๋ฒ ์ฃผ์ ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋์ฒด k8s ํด๋ฌ์คํฐ์์ ์์๋๋ก ์๋ํฉ๋๋ค. ํน์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ํน์ k8 ๊ตฌํ์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค @tklsnk