Skip to content

flexyzwork/pulumi-python-oke-multi-infrastructure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

OCI Infrastructure with Pulumi

Oracle Cloud Infrastructure (OCI)์—์„œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” Pulumi ๊ธฐ๋ฐ˜ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ

  • ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ OKE ํด๋Ÿฌ์Šคํ„ฐ: ์„œ์šธ(se)๊ณผ ์˜ค์‚ฌ์นด(os) ๋ฆฌ์ „์— Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ž๋™ ์ƒ์„ฑ
  • ๋„คํŠธ์›Œํ‚น: VCN, ์„œ๋ธŒ๋„ท, ๊ฒŒ์ดํŠธ์›จ์ด, ๋ณด์•ˆ ๊ทธ๋ฃน ์ž๋™ ๊ตฌ์„ฑ
  • IAM ๊ด€๋ฆฌ: ํ•„์š”ํ•œ ์ •์ฑ… ๋ฐ ๊ทธ๋ฃน ์ž๋™ ์ƒ์„ฑ
  • ํด๋Ÿฌ์Šคํ„ฐ ํ”ผ์–ด๋ง: ๋ฆฌ์ „ ๊ฐ„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์„ค์ •
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ: ์„œ๋น„์Šค ๋…ธ์ถœ์„ ์œ„ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„œ๋ธŒ๋„ท ๊ตฌ์„ฑ

๐Ÿšซ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ

  • OCI ๊ณ„์ • ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐ ์„ค์ •
  • ๋„๋ฉ”์ธ ๊ด€๋ฆฌ (Cloudflare DNS ์„ค์ •์€ ๋ณ„๋„ ํ•„์š”)
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ (Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋งŒ ์ œ๊ณต)
  • SSL ์ธ์ฆ์„œ ๊ด€๋ฆฌ
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น… ์†”๋ฃจ์…˜

๐Ÿ“‹ ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

1. OCI ๊ณ„์ • ๋ฐ ๊ธฐ๋ณธ ์„ค์ •

  1. OCI ๊ณ„์ • ์ƒ์„ฑ

  2. OCI CLI ์„ค์น˜

    # macOS
    brew install oci-cli
    
    # Linux
    bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
    
    # Windows
    # PowerShell์—์„œ ์‹คํ–‰
    powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1'))"
  3. OCI CLI ์„ค์ •

    oci setup config
    • User OCID, Tenancy OCID, Region, Private Key Path ์ž…๋ ฅ
    • API Key๋ฅผ OCI ์ฝ˜์†”์—์„œ ๋“ฑ๋ก

2. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

  1. Python 3.8+ ์„ค์น˜

  2. Pulumi ์„ค์น˜

    # macOS
    brew install pulumi
    
    # Linux/Windows
    curl -fsSL https://get.pulumi.com | sh
  3. Pulumi ๊ณ„์ • ์„ค์ •

    pulumi login

๐Ÿ› ๏ธ ์„ค์ • ๊ฐ€์ด๋“œ

1. ํ”„๋กœ์ ํŠธ ์„ค์ •

# ํ”„๋กœ์ ํŠธ ํด๋ก 
git clone https://github.com/flexyzwork/pulumi-python-oke-infrastructure.git
cd pulumi-python-oke-infrastructure

# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •
make install

2. OCI ๊ด€๋ฆฌ์ž ๊ทธ๋ฃน ํ™•์ธ

OCI ์ฝ˜์†”์—์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰: alt text

  1. Identity & Security โ†’ ๋„๋ฉ”์ธ ์ด๋™
  2. ํ˜„์žฌ ๋„๋ฉ”์ธ์˜ ๊ทธ๋ฃน ๋งํฌ ํด๋ฆญ
  3. ๊ทธ๋ฃน ํƒญ์—์„œ Administrators ์„ ํƒ
  4. Administrators์˜ OCID ๋ณต์‚ฌ (๋‚˜์ค‘์— config.json์—์„œ ์‚ฌ์šฉ)

3. ์‚ฌ์šฉ์ž๋ฅผ ๊ทธ๋ฃน์— ์ถ”๊ฐ€

  1. Identity & Security โ†’ ๋„๋ฉ”์ธ ์ด๋™
  2. ํ˜„์žฌ ๋„๋ฉ”์ธ์˜ ์‚ฌ์šฉ์ž ๋งํฌ ํด๋ฆญ
  3. ๋ณธ์ธ ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰ ํ›„ ์„ ํƒ - Administrators ๊ทธ๋ฃน์— ์ถ”๊ฐ€

4. ๊ด€๋ฆฌ์ž ์ •์ฑ… ์ƒ์„ฑ

  1. Identity & Security โ†’ Policies ์ด๋™
  2. Create Policy ํด๋ฆญ
  3. ์ •์ฑ… ์ •๋ณด ์ž…๋ ฅ:
    • Name: Tenant Admin Policy
    • Description: Admin policy for OCI infrastructure
    • Compartment: Root compartment ์„ ํƒ
  4. Policy Builder์—์„œ ๋‹ค์Œ ์ •์ฑ… ์ถ”๊ฐ€:
    ALLOW GROUP Administrators to manage all-resources IN TENANCY
    

5. ๊ฐ€์šฉ์„ฑ ๋„๋ฉ”์ธ ๋ฐ ์ด๋ฏธ์ง€ OCID ํ™•์ธ

๊ฐ ๋ฆฌ์ „์—์„œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ํ™•์ธ:

# ์„œ์šธ ๋ฆฌ์ „ ์„ค์ •
export OCI_CLI_REGION=ap-seoul-1

# ๊ฐ€์šฉ์„ฑ ๋„๋ฉ”์ธ ์กฐํšŒ
oci iam availability-domain list --compartment-id <your-tenancy-ocid>

# Oracle Linux ์ด๋ฏธ์ง€ ์กฐํšŒ (ARM ๊ธฐ๋ฐ˜)
oci compute image list --compartment-id <your-tenancy-ocid> --operating-system "Oracle Linux" --shape "VM.Standard.A1.Flex"

# ์˜ค์‚ฌ์นด ๋ฆฌ์ „๋„ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰
export OCI_CLI_REGION=ap-osaka-1
# ์œ„ ๋ช…๋ น์–ด๋“ค ์žฌ์‹คํ–‰

6. ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ

Pulumi config์— SSH ๊ณต๊ฐœํ‚ค๋ฅผ ์„ค์ •:

pulumi config set --secret ssh_public_key "your-ssh-public-key"
# ์˜ˆ์‹œ
pulumi config set --secret ssh_public_key "ssh-ed25519 AAAAC3NzaC1lZ......"

pulumi.prod.yaml ํŒŒ์ผ์— ์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋จ

# ์˜ˆ์ œ ํŒŒ์ผ ๋ณต์‚ฌ
cp config.json.example config.json

config.json ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ ์‹ค์ œ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ:

{
  "peer_map": {
    "se": ["os"]
  },
  "home_region": "os",
  "node": {
    "kubernetes_version": "v1.32.1",
    "node_pool_name": "pool1",
    "node_pool_size": 2,
    "node_shape": "VM.Standard.A1.Flex",
    "node_memory_gbs": 12,
    "node_ocpus": 2
  },
  "regions": {
    "se": {
      "availability_domain": "YOUR_SEOUL_AD",
      "service_cidr": "all-icn-services-in-oracle-services-network",
      "service_id": "YOUR_SEOUL_SERVICE_ID",
      "image_id": "YOUR_SEOUL_IMAGE_ID",
      "vcn_cidr_block": "10.10.0.0/16",
      "node_subnet_cidr_block": "10.10.10.0/24",
      "k8s_api_subnet_cidr_block": "10.10.20.0/24",
      "service_lb_subnet_cidr_block": "10.10.30.0/24",
      "admin_group_id": "YOUR_ADMIN_GROUP_OCID"
    },
    "os": {
      "availability_domain": "YOUR_OSAKA_AD",
      "service_cidr": "all-kix-services-in-oracle-services-network",
      "service_id": "YOUR_OSAKA_SERVICE_ID",
      "image_id": "YOUR_OSAKA_IMAGE_ID",
      "vcn_cidr_block": "10.30.0.0/16",
      "node_subnet_cidr_block": "10.30.10.0/24",
      "k8s_api_subnet_cidr_block": "10.30.20.0/24",
      "service_lb_subnet_cidr_block": "10.30.30.0/24",
      "admin_group_id": "YOUR_ADMIN_GROUP_OCID"
    }
  }
}

๐Ÿš€ ๋ฐฐํฌ

1. ์Šคํƒ ์ดˆ๊ธฐํ™” ๋ฐ ๋ฐฐํฌ

# ์ƒˆ ์Šคํƒ ์ƒ์„ฑ
pulumi stack init prod

# ์Šคํƒ ํ™•์ธ
pulumi stack ls -a
NAME                            LAST UPDATE  RESOURCE COUNT  URL
prod*                           n/a          n/a             https://app.pulumi.com/flexyzwork/oke-infra/prod

# ์Šคํƒ ์„ ํƒ (์ฐธ๊ณ )
pulumi stack select prod

2. ์„ค์ • ํ™•์ธ

# ์„ค์ • ๋ฏธ๋ฆฌ๋ณด๊ธฐ
make preview

2. ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ๋ฐฐํฌ

# ์ „์ฒด ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ๋ฐฐํฌ
make up

๋ฐฐํฌ๋Š” ์•ฝ 10-15๋ถ„ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

3. ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ

# Pulumi ์Šคํƒ ์ƒํƒœ ํ™•์ธ
pulumi stack ls

# ๋ฆฌ์†Œ์Šค ์ƒํƒœ ํ™•์ธ
pulumi stack output

๐Ÿ”ง ์‚ฌ์šฉ๋ฒ•

ํด๋Ÿฌ์Šคํ„ฐ ์ ‘๊ทผ ์„ค์ • (Kubeconfig ์„ค์ •)

OKE ํด๋Ÿฌ์Šคํ„ฐ์˜ kubeconfig๋Š” ~/.kube/config-<region> ํŒŒ์ผ์— ์ €์žฅ ๋˜์–ด ์žˆ์Œ

# ๊ฐ ํ™˜๊ฒฝ๋ณ„ kubeconfig ๋‹ค์šด๋กœ๋“œ (์ฐธ๊ณ )
oci ce cluster create-kubeconfig --cluster-id <cluster-id> --file ~/.kube/config-os
oci ce cluster create-kubeconfig --cluster-id <cluster-id> --file ~/.kube/config-se

# ์ปจํ…์ŠคํŠธ ์ „ํ™˜
export KUBECONFIG=~/.kube/config-se
kubectl get nodes

export KUBECONFIG=~/.kube/config-os
kubectl get nodes

๋„๋ฉ”์ธ ์„ค์ • (๋ณ„๋„ ์ž‘์—…)

์˜ˆ์‹œ

Outputs:
   os-public_ip_address               : "146.56.141.88"
   se-public_ip_address               : "152.52.142.77"

Cloudflare DNS์—์„œ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ:

  1. Cloudflare ๋Œ€์‹œ๋ณด๋“œ ์ ‘์†
  2. DNS Records์—์„œ A ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€ alt text alt text

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

.
โ”œโ”€โ”€ __main__.py              # Pulumi ๋ฉ”์ธ ์ง„์ž…์ 
โ”œโ”€โ”€ cluster/                 # OKE ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ
โ”œโ”€โ”€ compartment/            # OCI Compartment ๊ด€๋ฆฌ
โ”œโ”€โ”€ config/                 # ์„ค์ • ๊ด€๋ฆฌ
โ”œโ”€โ”€ iam/                    # IAM ์ •์ฑ… ๋ฐ ๊ทธ๋ฃน ๊ด€๋ฆฌ
โ”œโ”€โ”€ network/                # VCN, ์„œ๋ธŒ๋„ท, ๋ณด์•ˆ ๊ทธ๋ฃน ๊ด€๋ฆฌ
โ”œโ”€โ”€ utils/                  # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ”œโ”€โ”€ config.json             # ์‹ค์ œ ํ™˜๊ฒฝ ์„ค์ • (์ƒ์„ฑ ํ•„์š”)
โ”œโ”€โ”€ config.json.example     # ์„ค์ • ์˜ˆ์ œ ํŒŒ์ผ
โ””โ”€โ”€ Makefile               # ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ

๐Ÿ› ๏ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด

# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •
make install

# ์„ค์ • ๋ฏธ๋ฆฌ๋ณด๊ธฐ
make preview

# ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ๋ฐฐํฌ
make up

# ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ์‚ญ์ œ
make destroy

# ๋กœ๊ทธ ํ™•์ธ
tail -f app.log

โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ

  1. ๋น„์šฉ: VM.Standard.A1.Flex ์ธ์Šคํ„ด์Šค๋Š” Always Free Tier์— ํฌํ•จ๋˜์ง€๋งŒ, ์‚ฌ์šฉ๋Ÿ‰์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์„ธ์š”
  2. ๋ฆฌ์ „ ์ œํ•œ: ์ผ๋ถ€ ๋ฆฌ์ „์—์„œ๋Š” A1 ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  3. ๋ฆฌ์†Œ์Šค ํ•œ๋„: OCI ๊ณ„์ •์˜ ์„œ๋น„์Šค ํ•œ๋„๋ฅผ ํ™•์ธํ•˜์„ธ์š”
  4. ๋„คํŠธ์›Œํฌ: CIDR ๋ธ”๋ก์ด ๊ฒน์น˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”

๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ

์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜

  1. Authentication Error

    # OCI CLI ์„ค์ • ์žฌํ™•์ธ
    oci setup config
  2. Capacity Issue

    • ๋‹ค๋ฅธ ๊ฐ€์šฉ์„ฑ ๋„๋ฉ”์ธ ์‹œ๋„
    • ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ํƒ€์ž… ์‹œ๋„
  3. Network CIDR Conflict

    • config.json์˜ CIDR ๋ธ”๋ก ์ˆ˜์ •
  4. Policy Errors

    • IAM ์ •์ฑ… ๋ฐ ๊ทธ๋ฃน ์„ค์ • ์žฌํ™•์ธ

๋กœ๊ทธ ํ™•์ธ

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ
tail -f app.log

# Pulumi ๋กœ๊ทธ
pulumi logs

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

๐Ÿค ๊ธฐ์—ฌ

์ด์Šˆ๋‚˜ ๊ฐœ์„ ์‚ฌํ•ญ์ด ์žˆ์œผ์‹œ๋ฉด GitHub Issues๋ฅผ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”.

๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License

About

Pulumi-based infrastructure as code for pulumiprovisioning OKE clusters on Oracle Cloud (multi-region)

Topics

Resources

License

Stars

Watchers

Forks