https://www.raspberrypi.com/software/
wlan ip 할당 + ssh 설정을 위해, 오른쪽 하단 환경설정 버튼을 클릭하여
이때 wifi 이름이 "aaa_5G" 이런 식은 안된다.
모니터에 연결한 후, 3분 정도 기다리면 ip설정이 완료된다.
ifconfig
-> 랜덤으로 ip가 할당되어있다.
먼저 sudo -i
로 root권한으로 접속한다.
참고로, 해당 작업은 ssh연결해서 해도 된다. 그러나 고정 IP를 할당하고 원격 접속하는게 편하며,
swap, iptables, cgroup은 쿠버네티스에서 사용하기 위해 설정해준다.
어차피 나중에 하면서 재부팅 여러번 할 바에, 한번에 한다.
+) cgroup만 하면 된다!
sudo nano /boot/cmdline.txt
$ cgroup_memory=1 cgroup_enable=memory 추가
sudo nano /etc/dhcpcd.conf
해당 파일에 3줄을 추가해준다.
interface wlan0
static ip_address=192.168.123.118/24
static routers=192.168.123.1
sudo reboot
재부팅
ifconfig
-> 설정한 ip '192.168.123.118'가 할당되어있다.
id, pw는 앞서 라파이 imager에서 설정한 걸 입력하면 접속완료.
여기 기록한건 아주 일부분이다. 해당 깃헙링크를 참고하자.
sudo apt update
sudo apt install -y docker.io nfs-common dnsutils curl
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="\
--disable traefik \
--node-name master --docker \
--disable servicelb " sh -
마스터 IP, TOKEN 넣기 + worker noed 이름 변경
이때, 워커 노드도 cgroup설정 + sudo -i로 root권한에서 해줘야한다.
명령어에서 노드 이름 바꾸는거 잊지맙시다.
curl -sfL https://get.k3s.io | K3S_URL=https://<마스터노드 IP>:6443 \
K3S_TOKEN=<마스터노드 토큰> \
INSTALL_K3S_EXEC="--node-name <워커노드 이름> --docker" sh -
kubectl get node
로 워커노드3개, 마스터노드 1개가 Ready인 상태면 완료.
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml
kubectl get pod -n metallb-system
만약 노드가 총 4개라면, speaker 4개가 Running 상태여야한다.
vi config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.123.130-192.168.123.200 # IP 대역폭
kubectl apply -f config.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/baremetal/deploy.yaml
처음에 바보같이 baremetal이 아닌 cloud로 설치했었따.
+) 공식사이트 참고
+) 만약 controller를 지워야한다면...
kubectl delete -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/baremetal/deploy.yaml
kubectl get svc -n ingress-nginx
다음 그림과 같이 type이 기본적으로 NodePort이다. 이를 LoadBalancer로 바꿔줄 것이다.
nginx controller 기본이 nodeport이므로, 이를 loadBalancer로 바꿔준다.
kubectl edit svc -n ingress-nginx ingress-nginx-controller
loadBalancer로 바뀐 것을 확인 가능하다. + loadBalancer이기 때문에, 외부 IP도 자동으로 할당되어있다.
그렇다면, controller는 만들어졌고, ingress.yaml파일로 ingress를 만들고,
vi ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
name: ingress-resource-3
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-deploy-main
port:
number: 80
- path: /blue
pathType: Prefix
backend:
service:
name: nginx-deploy-blue
port:
number: 80
- path: /green
pathType: Prefix
backend:
service:
name: nginx-deploy-green
port:
number: 80
kubectl apply -f ingress.yaml
으로 apply
kubectl get ingress
으로 확인
`kubectl get all -n ingress-nginx
이걸로도 확인하면 좋다.
이제 loadBalancer 와 연결할 deployment를 만들자.
vi nginx-deploy-main.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx
name: nginx-deploy-main
spec:
replicas: 1
selector:
matchLabels:
run: nginx-main
template:
metadata:
labels:
run: nginx-main
spec:
containers:
- image: nginx
name: nginx
vi nginx-deploy-blue.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx
name: nginx-deploy-blue
spec:
replicas: 1
selector:
matchLabels:
run: nginx-blue
template:
metadata:
labels:
run: nginx-blue
spec:
volumes:
- name: webdata
emptyDir: {}
initContainers:
- name: web-content
image: busybox
volumeMounts:
- name: webdata
mountPath: "/webdata"
command: ["/bin/sh", "-c", 'echo "<h1>I am <font color=blue>BLUE</font></h1>" > /webdata/index.html']
containers:
- image: nginx
name: nginx
volumeMounts:
- name: webdata
mountPath: "/usr/share/nginx/html"
vi nginx-deploy-green.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx
name: nginx-deploy-green
spec:
replicas: 1
selector:
matchLabels:
run: nginx-green
template:
metadata:
labels:
run: nginx-green
spec:
volumes:
- name: webdata
emptyDir: {}
initContainers:
- name: web-content
image: busybox
volumeMounts:
- name: webdata
mountPath: "/webdata"
command: ["/bin/sh", "-c", 'echo "<h1>I am <font color=green>GREEN</font></h1>" > /webdata/index.html']
containers:
- image: nginx
name: nginx
volumeMounts:
- name: webdata
mountPath: "/usr/share/nginx/html"
kubectl apply -f nginx-deploy-main.yaml
kubectl expose deploy nginx-deploy-main --port 80
3개 다 해준다.
curl [ingress controller 주소]
해당 명령어에서 정상적으로 뜨면, 1차로 완료되었다
kubectl describe ing
웹브라우저에서도 잘되는지 보자.
처음에 curl은 되지만 웹브라우저에서 계속 안됬었는데, metallb, ingress를 몇번이고 다시해도 안됐다.
그냥 sudo reboot
하니까 해결되었다...
많은 도움이 되었습니다, 감사합니다.