[Ubuntu] 우분투 설치 후 Docker, Kubernetes, SQL Server 설치
Ubuntu 22.04.3 서버 설정 가이드
Ubuntu 22.04.3 서버를 설치하고 Docker, Kubernetes, SQL Server를 설치하는 가이드입니다.
사전에 Ubuntu 22.04.3 서버를 설치해야 합니다.
- Rufus를 사용하여 USB 부팅디스크를 만들고, BIOS에서 부팅디스크를 선택하여 설치합니다.
- https://ubuntu.com/download/server#download 에서 Ubuntu 22.04.3 LTS를 다운로드 받습니다.
목차
- Ubuntu 22.04.3 서버 설정 가이드
서버 초기 설정
- 시스템 업데이트
sudo apt update && sudo apt upgrade -y
Docker 설치
- Docker 저장소 설정 및 필요한 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- Docker 설치
sudo apt update sudo apt install docker-ce
- Docker 서비스 상태 확인
sudo systemctl status docker
Kubernetes 설치
- Kubernetes 저장소 설정
sudo apt update sudo apt install apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
- Kubernetes 패키지 설치
sudo apt update sudo apt install -y kubelet kubeadm kubectl
- Kubelet 서비스 활성화
sudo systemctl enable kubelet sudo systemctl start kubelet
- Kubernetes 버전 확인
kubectl version
- Kubernetes 초기화
kubeadm init 명령어는 일반적으로 쿠버네티스 마스터 노드를 초기화하는 데 사용됩니다.
sudo kubeadm init
- Kubernetes 설정
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Kubernetes 상태 확인
kubectl get nodes
- Kubernetes 네트워크 설치
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- Kubernetes 네트워크 상태 확인
kubectl get pods -n kube-system or kubectl get nodes -o wide
- 특정 버전의 Kubernetes 설치
sudo apt install -y kubelet=1.21.0-00 kubeadm=1.21.0-00 kubectl=1.21.0-00
- 특정 Pod 네트워크 CIDR 설정
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- Role-Based Access Control(RBAC) 설정
Role-Based Access Control (RBAC)은 쿠버네티스에서 역할을 기반으로
리소스에 대한 접근을 제어하는 인증 메커니즘입니다.
RBAC 규칙을 구성하여 사용자나 시스템 컴포넌트가 수행할 수 있는 작업을 제한할 수 있습니다.
–apiserver-advertise-address 플래그는 API 서버가 광고할 IP 주소를 지정할 수 있게 합니다.
그러나 이 명령어 자체는 RBAC 규칙을 설정하지 않습니다. RBAC 정책은 주로 YAML 매니페스트를 통해 정의됩니다.
read-pods-role.yaml 파일을 생성하고 다음 내용을 추가합니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: read-pods
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
read-pods-role-binding.yaml 파일을 생성하고 다음 내용을 추가합니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods-role-binding
namespace: default
subjects:
- kind: User
name: admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: read-pods
apiGroup: rbac.authorization.k8s.io
kubectl apply 명령어를 사용하여 RBAC 정책을 적용합니다.
kubectl apply -f read-pods-role.yaml
kubectl apply -f read-pods-role-binding.yaml
read-pods 라는 이름의 Role을 생성하고,
admin 이라는 이름의 User에게 read-pods Role을 바인딩합니다.
이제 admin User는 default 네임스페이스의 모든 Pod를 읽을 수 있습니다.
- Kubernetes 재설정
sudo kubeadm reset
SQL Server 2019 컨테이너 설치
- 볼륨 생성 (옵션)
docker volume create sql_server_data
- SQL Server 컨테이너 실행
sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourPassword>' -p 1433:1433 --name sql_server_container -v sql_server_data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest
# 볼륨 생성 확인 docker volume inspect sql_server_data
[ { "CreatedAt": "2023-10-31T15:24:08+09:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/sql_server_data/_data", "Name": "sql_server_data", "Options": null, "Scope": "local" } ] sudo ls /var/lib/docker/volumes/sql_server_data/_data
data: 실제 데이터베이스 파일이 저장되는 위치입니다.
log: SQL Server의 로그 파일이 저장됩니다.
secrets: 비밀 정보나 인증 관련 파일이 저장될 수 있습니다. - SQL Server 컨테이너 상태 확인
sudo docker ps -a
- SQL Server 컨테이너 접속
# SQL Server 컨테이너 접속 sudo docker exec -it sql_server_container /opt/mssql-tools/bin/sqlcmd # 컨테이너 내부 쉘 접속 sudo docker exec -it sql_server_container /bin/bash # 데이터 파일 위치 확인 cd /var/opt/mssql/data ls # 에러 로그 확인 cat errorlog # 컨테이너에서 나가기 exit # 컨테이너 정지 및 삭제 sudo docker stop sql_server_container sudo docker rm sql_server_container # 볼륨 삭제 sudo docker volume rm sql_server_data # 컨테이너 목록 확인 sudo docker ps -a # 이미지 목록 확인 sudo docker images # 미사용 리소스 삭제 sudo docker system prune -a
-- SQL Server 버전 확인 SELECT @@VERSION GO -- 데이터베이스 목록 확인 SELECT name FROM sys.databases GO -- 마스터 데이터베이스 사용 USE master GO -- 새 데이터베이스 생성 CREATE DATABASE TestDB GO -- 데이터베이스 목록 다시 확인 SELECT name FROM sys.databases GO -- 새 데이터베이스 사용 USE TestDB GO -- 테이블 생성 CREATE TABLE TestTable (id INT, name VARCHAR(20)) GO -- 데이터 삽입 INSERT INTO TestTable VALUES (1, 'Test1') GO -- 데이터 확인 SELECT * FROM TestTable GO -- 테이블 삭제 DROP TABLE TestTable GO -- 데이터베이스 삭제 DROP DATABASE TestDB GO -- 컨테이너에서 나가기 QUIT
SSH 설치 및 설정 (원격 접속)
- SSH 설치
sudo apt update sudo apt install openssh-server
- SSH 서비스 상태 확인
sudo systemctl status ssh
- SSH 서비스 활성화
sudo systemctl enable ssh
방화벽 설정 (UFW 사용)
- UFW 설치
sudo apt install ufw
- SSH 포트 (기본적으로 22) 열기
sudo ufw allow 22/tcp
- UFW 활성화
sudo ufw enable
- 다른 필요한 포트 열기 (예: HTTP, HTTPS)
sudo ufw allow 80,443/tcp
기타 사항
보안 강화
Fail2Ban 설치 및 설정
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
로깅과 모니터링
Prometheus와 Grafana 설치
sudo apt install prometheus
sudo apt install grafana
사용자 관리
계정 생성 및 권한 설정
sudo adduser new_user
sudo usermod -aG sudo new_user
백업과 복구
rsync를 사용한 데이터 백업
rsync -av --progress source_folder destination_folder
웹 서버 설정
Nginx 설치 및 설정
sudo apt install nginx
sudo systemctl enable nginx
sudo systemctl start nginx
데이터베이스 연결
PostgreSQL 설치 및 설정
sudo apt install postgresql
DevOps 파이프라인
Jenkins 설치
sudo apt install jenkins
클러스터링과 로드 밸런싱
HAProxy 설치
sudo apt install haproxy
SSL/TLS 설정
Let’s Encrypt 사용하여 SSL 인증서 발급
sudo apt install certbot
sudo certbot --nginx
시스템 최적화
Swappiness 설정 변경
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
Note: 만들고나니 내것이 아니었다.
Leave a comment