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를 다운로드 받습니다.

목차


서버 초기 설정

  1. 시스템 업데이트
     sudo apt update && sudo apt upgrade -y
    

Docker 설치

  1. 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"
    
  2. Docker 설치
     sudo apt update
     sudo apt install docker-ce
    
  3. Docker 서비스 상태 확인
     sudo systemctl status docker
    

Kubernetes 설치

  1. 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
    
  2. Kubernetes 패키지 설치
     sudo apt update
     sudo apt install -y kubelet kubeadm kubectl
    
  3. Kubelet 서비스 활성화
     sudo systemctl enable kubelet
     sudo systemctl start kubelet
    
  4. Kubernetes 버전 확인
     kubectl version
    
  5. Kubernetes 초기화 kubeadm init 명령어는 일반적으로 쿠버네티스 마스터 노드를 초기화하는 데 사용됩니다.
     sudo kubeadm init
    
  6. Kubernetes 설정
     mkdir -p $HOME/.kube
     sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
     sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  7. Kubernetes 상태 확인
     kubectl get nodes
    
  8. Kubernetes 네트워크 설치
     kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    
  9. Kubernetes 네트워크 상태 확인
     kubectl get pods -n kube-system
     or 
     kubectl get nodes -o wide
    
  10. 특정 버전의 Kubernetes 설치
    sudo apt install -y kubelet=1.21.0-00 kubeadm=1.21.0-00 kubectl=1.21.0-00
    
  11. 특정 Pod 네트워크 CIDR 설정
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    
  12. 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를 읽을 수 있습니다.

  1. Kubernetes 재설정
      sudo kubeadm reset
    

SQL Server 2019 컨테이너 설치

  1. 볼륨 생성 (옵션)
     docker volume create sql_server_data
    
  2. 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: 비밀 정보나 인증 관련 파일이 저장될 수 있습니다.

  3. SQL Server 컨테이너 상태 확인
     sudo docker ps -a
    
  4. 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 설치 및 설정 (원격 접속)

  1. SSH 설치
     sudo apt update
     sudo apt install openssh-server
    
  2. SSH 서비스 상태 확인
     sudo systemctl status ssh
    
  3. SSH 서비스 활성화
     sudo systemctl enable ssh
    

방화벽 설정 (UFW 사용)

  1. UFW 설치
     sudo apt install ufw
    
  2. SSH 포트 (기본적으로 22) 열기
     sudo ufw allow 22/tcp
    
  3. UFW 활성화
     sudo ufw enable
    
  4. 다른 필요한 포트 열기 (예: 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