카테고리 없음

쿠버네티스 조금 복습

서머스 2022. 7. 29. 19:21

 

CentOS를 만든다.

 

 

NAT GW - ipv4의 송신 전용 게이트웨이

송신전용인터넷게이트웨이 - ipv6의 송신 전용 게이트웨이

내부에서 worker - master 연결하기

 

 

# hostnamectl set-hostname master
# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/docker-ce.repo
# yum --enablerepo=docker-ce-stable -y install docker-ce-19.03.15-3.el7
# 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
# systemctl enable --now docker
# systemctl daemon-reload
# systemctl restart docker
# systemctl disable --now firewalld
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

# swapoff -a
# sed -i '/ swap / s/^/#/' /etc/fstab

# cat <<EOF > /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# kubernetes에서 k와 s사이 8글자, 약칭으로 k8s.로 부른다.

# sysctl --system
# reboot

# swapoff -a

옛날에는 swap보다는 HDD를 이용했지만, 최근에는 메모리와 유사한 SSD를 이용하여 저장장치를 이용하므로 이의 일부를 swap으로 이용하는 것이 의미가 있다 -> 성능 향상

하지만 k8s는 이러한 공간이 필요가 없어서 swap 공간을 0으로 만들어야 한다.

 

# sed -i '/ swap / s/^/#/' /etc/fstab

swap문구를 찾아서 앞에 #을 넣어 주석처리 해 준다.

 

 

# cat <<EOF > /etc/sysctl.d/k8s.conf 

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

# kubernetes에서 k와 s사이 8글자, 약칭으로 k8s.로 부른다.

 

# sysctl --system

bridge기능을 넣는다.

커널 수정이므로 적용시키기 위해서 systctl을 해야 한다.

 

~~

 

nginx의 컨트롤러가 생성되어있다.

 

# mkdir ingress && cd $_
# vi ingress-deploy.yaml

 

 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: foods-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: foods-deploy
  template:
    metadata:
      labels:
        app: foods-deploy
    spec:
      containers:
      - name: foods-deploy
        image: halilinux/test-home:v1.0
---
apiVersion: v1
kind: Service
metadata:
  name: foods-svc
spec:
  type: ClusterIP
  selector:
    app: foods-deploy
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sales-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sales-deploy
  template:
    metadata:
      labels:
        app: sales-deploy
    spec:
      containers:
      - name: sales-deploy
        image: halilinux/test-home:v2.0
---
apiVersion: v1
kind: Service
metadata:
  name: sales-svc
spec:
  type: ClusterIP
  selector:
    app: sales-deploy
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: home-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: home-deploy
  template:
    metadata:
      labels:
        app: home-deploy
    spec:
      containers:
      - name: home-deploy
        image: halilinux/test-home:v0.0
---
apiVersion: v1
kind: Service
metadata:
  name: home-svc
spec:
  type: ClusterIP
  selector:
    app: home-deploy
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

---로 구분해서 하나의 파일에 넣을 수 있다.

 

pod의 ip로 접속할 수 있다.

 

pod의 ip 범위를 처음에 init할 때 10.244.0.0/16 으로 했으므로 이 범위 내에 있다

 

 

foods-deploy~ 로 접속한다.

 

# vi ingress-config.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations: # 주석 : 예: 저자, 연락처… 
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http: #타겟 그룹 세팅과 유사하다.
      paths:
      - path: /foods
        backend:
          serviceName: foods-svc
          servicePort: 80
      - path: /sales
        backend:
          serviceName: sales-svc
          servicePort: 80
      - path:
        backend:
          serviceName: home-svc # /뒤 -> 디폴트 값은 home
          servicePort: 80

/ 다음에 food가 들어오면 food의 service로, sales는 sales로, 아무것도 아니면 home으로 가도록 설정한다.