[K3s-01] K3s 설치 및 Terraform 설정 방법
·445 자
목차
Terraform 예시 #
K3s 공식 요구 사항에 따르면 K3s 노드를 설정하기 위한 몇 가지 전제 조건이 있습니다. 모든 노드에 대해 다음 단계가 필요합니다:
ufw disable
- VXLAN 포트 “8472"을 확인
노드의 VXLAN 포트는 전 세계에 노출되어서는 안 되며, 이는 귀하의 클러스터 네트워크가 누구나 접근할 수 있도록 열립니다. 포트 8472에 대한 접근을 비활성화하는 방화벽/보안 그룹 뒤에서 노드를 실행하십시오.
시스템 요구 사항에 따르면 AWS에서 micro
인스턴스 크기가 가능합니다. 그러나 개인적 경험에 따르면 small
인스턴스 크기를 권장합니다.
variable "vpc_id" { default = "vpc-xxx" }
variable "vpc_cidr" { default = "172.31.0.0/16" }
variable "subnet_id" { default = "subnet-xxx" }
resource "aws_instance" "k3s" {
count = 3
# ubuntu 22.04
ami = "ami-086cae3329a3f7d75"
instance_type = "t2.small"
key_name = aws_key_pair.k3s_key.key_name
# associate_public_ip_address = false
network_interface {
device_index = 0
network_interface_id = aws_network_interface.k3s_network_interface[count.index].id
}
tags = { Name = "k3s" }
}
resource "aws_network_interface" "k3s_network_interface" {
count = 3
subnet_id = var.subnet_id
security_groups = [aws_security_group.k3s_security_group.id]
tags = { Name = "k3s-network-interface" }
}
resource "aws_eip" "k3s_static_ip" {
count = 3
instance = aws_instance.k3s[count.index].id
network_interface = aws_network_interface.k3s_network_interface[count.index].id
vpc = true
}
output "k3s_static_ip" {
value = aws_eip.k3s_static_ip[*].public_ip
}
# K3s 서버 노드를 위한 인바운드 규칙
# https://docs.k3s.io/kr/installation/requirements#inbound-rules-for-k3s-server-nodes
resource "aws_security_group" "k3s_security_group" {
name = "k3s-security-group"
vpc_id = var.vpc_id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 2379
to_port = 2379
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 2380
to_port = 2380
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 6443
to_port = 6443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 10250
to_port = 10250
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 51820
to_port = 51820
protocol = "udp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 51821
to_port = 51821
protocol = "udp"
cidr_blocks = ["0.0.0.0/0"]
}
# VXLAN 포트: 외부에 노출하면 안 됨
ingress {
from_port = 8472
to_port = 8472
protocol = "udp"
cidr_blocks = [var.vpc_cidr]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
K3s 설치 #
curl -sfL https://get.k3s.io | sh -
- Kubectl 설정 파일:
/etc/rancher/k3s/k3s.yaml
- K3S_TOKEN:
/var/lib/rancher/k3s/server/node-token
- kubectl 명령:
sudo k3s kubectl ...
Control plane의 URL을 K3S_URL로 제공합니다. 이것은 k3s의 agent 노드로 설정하게 합니다. k3s 에이전트가 추가되는 중에는 kubectl
을 실행할 수 없습니다.
curl -sfL https://get.k3s.io | \
K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
K3s를 설치하는 데는 보다 더 많은 옵션이(매개변수) 존재합니다. 자세한 내용은 https://docs.k3s.io/cli/server 를 참조하십시오. 그러나 이 접근 방식의 단점은 K3s가 실행되는 동안 옵션을 동적으로 구성하기가 쉽지 않다는 것입니다.