사붐이개발일기
[Docker] 윈도우에서 도커 설치하기 본문
kubeadm join 192.168.32.10:6443 --token x1qogf.3i1d8zc267sm4gq8 \
--discovery-token-ca-cert-hash sha256:1965b56832292d3de10fc95f92b8391334d9404c914d407baa2b6cec1dbe5322
Virtualization Hypervisor - VirtualBox
1. Vagrant + VirtualBox 이용한 가상화 구성
1.1 Vagrant download
vagrant hashicorp > download > windows > 인텔이면 I686, 암드면 AMD64로 다운로드 받기
Vagrant 란, 설정 스크립트를 기반으로 특정 환경의 가상머신을 생성
개발환경 궁유
Ruby로 개발되었으며 Linux, FreeBDS, OSX, Windows 지원
1-2. BirtualBox download


vagrant cloud 에서 os이미지 파일 다운로드
https://app.vagrantup.com/boxes/search

vagrant 명령어

3. vagrant os 설치방법
<CMD>
git에서 vagrant 디렉토리 클론해오기
C:\Work>git clone https://github.com/joneconsulting/vagrant.git
작업폴더생성
ex) C:\Work\vagrant
Vagrant VM 초기화
C:\Work\vagrant>vagrant init
VagrantFile 수정 (os는 vagrant cloud에서 가져와야한다.)

vagrant VM 실행
실행하기전 code에서 vagrantFile을 node1, node2를 주석 처리한다. (master node만 실행되어야 함)
작업디렉토리에 있는 vagrantFile을 찾아서 실행 시켜준다.
C:\work\vagrant\scripts>vagrant up
실행하다가 오류 발생할 경우 vagrantFile에서 인증서 검사를 하지 않도록 하는 옵션을 추가해주어야 에러 발생하지 않는다.

// vagrantFile
...
Vagrant.configure(...) do |config|
...
config.vm.box_download_insecure = true
...
end
...
Vagrant VM 확인
C:\Work\vagrant>vagrant status
# 192.168.32.10 -> Kubernetes Master (CPU:2, MEM:2048M)
# 192.168.32.11 -> Kubernetes Node1 (CPU:1, MEM:1024M)
# 192.168.32.12 -> Kubernetes Node2 (CPU:1, MEM:1024M)
Vagrant 인스턴스 연결 (접속)
C:\Work\vagrant>vagrant ssh [Vagrant VM 이름]
ex) vagrant ssh k8s-master
SSH Client 설치 (운영체제에 맞게 다운로드)
Terminus - https://termius.com
이제 모든 작업은 Termius에서 작성함
4. 사전 준비 - Master, Node 모두
<cmd>
cmd에서 Vagrant 접속 후 명령어 입력
sudo apt install net-tools // 기본명령어 사용할수있도록 도와줌
ifconfig // =ipconfig
<termius>
Root 계정 변경
sudo su -
Root Password 변경 (ex, vagrant로 변경)
passwd root
New password: vagrant
Retype new password: vagrant
SWAP 비활성화
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
노드간 통신을 위한 Bridge 설정 (Iptables 커널 옵션 활성화)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF>> /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
Hostname 변경(Vagrantfile에서 변경 됨), Hosts 파일 수정 --> 각 노드의 ipaddress에 맞게 수정, Hostname 변경하지 않으면 kubeadm join 시 오류 발생
vi /etc/hosts
// /etc/hosts 맨 아랫줄에 추가
192.168.32.10 k8s-master
192.168.32.11 k8s-node01
192.168.32.12 k8s-node02
// :wq!
ping k8s-master
5. Docker 설치, 실행 - Master, Node 모두
필수 패키지 설치
apt-get -y install ca-certificates curl gnupg net-tools
Docker GPG key 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Docker repostory 등록
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker engine 설치
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
Docker 버전 확인
docker version
Docker 서비스 등록
systemctl enable docker
systemctl status docker
// status 입력했을때 !를 입력해야 종료 가능
Dockeradmin 유저 생성 (optional)
useradd dockeradmin
passwd dockeradmin
# password --> dockeradmin
// docker 그룹에 dockeradmin 계정 추가
usermod -aG docker dockeradmin
6. Docker compose 설치
// docker-compose란, 여러개의 컨테이너를 관리하기 편리하게 사용할 수 있는 도구
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose -version
도커에서 nginx 이미지 다운받고 설치 후 실행하기
현재 가지고있는 docker 이미지 확인하기
docker images
프로세스가 아무것도 작동되고있지 않은지 확인하기
docker ps -a
docker에서 nginx 이미지 다운 명령어 확인하기
1. hub.docker.com 에서 nginx 검색
2. nginx 선택
3. nginx 이미지 다운 명령어 복사


nginx 이미지 다운받기
docker pull nginx
nginx 이미지 설치

// docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
docker run --name mynginx -d -p 80:80 nginx
웹서버 확인

도커 프로세스 중지, 삭제 명령어
- docker 이미지 확인
docker images

- docker 실행 프로세스 확인
docker ps -a

- docker 실행중인 프로세스 중지
docker stop mynginx
- docker 프로세스 삭제 (중지시켜도 프로세스는 살아있음)
docker rm mynginx
- docker 프로세스 실행
docker start mynginx
7. Kubernetes 설치 - Master, Node 모두
- kubeadm, kubelet, kubectl 설치 및 활성화
apt-get install -y apt-transport-https ca-certificates curl
- Key 추가 및 apt udpate
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
- 최신 버전 설치 (2023-06-07 기준 1.27 버전)
apt-get install -y kubelet kubeadm kubectl
- 버전 확인
kubeadm version
kubelet --version
kubectl version
- 최신 버전 업데이트 방지
apt-mark hold kubelet kubeadm kubectl
- K8s 1.22부터는 systemd와 cgroup을 맞추는 작업 필요
sudo mkdir /etc/docker
// 이미 생성되어 있을 수 있음 -> 넘어가기
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
- containerd 및 kubeadm 최신 업데이트
rm /etc/containerd/config.toml
systemctl restart containerd
kubeadm config images pull
8. Kubernetes 설정 - Master
- 초기화 (apiserver-advertise-address는 Master ipaddress -> 192.168.32.10)
kubeadm reset
kubeadm init --pod-network-cidr=10.96.0.0/16 --apiserver-advertise-address=192.168.32.10
- Kubeadm 실행 후 생성 된 아래 명령어를 복사해 놓고, Worker Node에서 실행 (생성되는 IP, Token 값은 본인의 환경에 따라 다름)
kubeadm join 192.168.32.10:6443 --token x1qogf.3i1d8zc267sm4gq8 \
--discovery-token-ca-cert-hash sha256:1965b56832292d3de10fc95f92b8391334d9404c914d407baa2b6cec1dbe5322
- kubectl을 root 계정없이 실행 (반드시 실행)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Network add-on - Calico 기본 설치 (Kubernetes Cluster Networking plugin, 2023-06-07 기준 3.25버전)
curl https://docs.projectcalico.org/archive/v3.25/manifests/calico.yaml -O --insecure
kubectl apply -f calico.yaml
kubectl get pods --all-namespaces
9. Kubernetes 노드 연결 - Node
- 연결 (Master의 init 작업에서 복사 한 커맨드를 사용)
kubeadm join 192.168.32.10:6443 --token x1qogf.3i1d8zc267sm4gq8 \
--discovery-token-ca-cert-hash sha256:1965b56832292d3de10fc95f92b8391334d9404c914d407baa2b6cec1dbe5322
- 연결 시 오류 발생하면 kubeadm reset 명령어로 초기화 후 다시 실행 (Node 모두 초기화)
kubeadm reset
- 확인 (Master에서)
kubectl get nodes
10. 테스트
- Pod 실행
kubectl run nginx-test --image=nginx --port 80
- Service 실행
kubectl expose pod nginx-test
kubectl get services
- Service Type 변경
kubectl edit service nginx-test # (ClusterIp -> NodePort)
- 확인 (port는 service에서 forwarding 된 port 사용)
http://192.168.32.10:30039/ # (<- port forwarding)
http://192.168.32.11:30039/ # (<- port forwarding)
VM환경에 Docker Engine 설치
Kubenetes Cluster 구축