1. Home
  2. 3rd Party Product
  3. Kubespray
  4. Install Kubespray as small production

Install Kubespray as small production

Requirement

สร้างเครื่อง 3 เครื่องสำหรับเป็น Kubernetes node
สร้างเครื่อง 1 เครื่อง สำหรับเป็น Load balancer
สร้างเครื่อง 1 เครื่อง สำหรับเป็น NFS server
สร้างเครื่อง 1 เครื่อง สำหรับเป็น Deployer

Pre-install Step

config firewall ระดับ instance (cloud firewall) ดังนี้
Load Balancer เปิด http & https (80/tcp & 443/tcp) จาก world-wide
NFS server เปิด port สำหรับ nfsv4 (2049/tcp) จาก K8S node
K8S node เปิด In-cluster (allow ทุก connection ระหว่าง node ด้วยกันเอง) และ allow ทุก request จาก Load Balancer

Login ไปยังเครื่อง Deployer
เตรียมเครื่องให้ Deployer สามารถ access ไปยัง K8S node ได้ โดยไม่ต้องอาศัย password

สร้าง key ที่ deployer

ssh-keygen -t rsa -b 2048 -f /home/nc-user/.ssh/id_rsa -N ""

add key ไปยัง K8S node

ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

ตรวจสอบให้แน่ใจว่า user ที่แต่ละ node สามารถ sudo เป็น root ได้

Installation Step

Login ไปยังเครื่อง Deployer

Install pip3 & virtualenv

sudo apt update
sudo apt upgrade
sudo apt install -y python3-pip
sudo apt install -y python3-venv

Install Kubespray

Clone Kubespray จาก git

git clone https://github.com/kubernetes-sigs/kubespray.git

เข้าไปยัง directory kubespray และ copy sample มาสร้าง config ของตนเอง

cd kubespray
cp -rfp inventory/sample inventory/mycluster

create & activate virtualenv

python3 -m venv virtualenv
source /home/nc-user/virtualenv/bin/activate

install requirement

pip3 install setuptools
pip3 install -r requirements.txt

แก้ไข inventory.ini

vi inventory/mycluster/inventory.ini

node1   ansible_host=10.148.0.11   ip=10.148.0.11
node2   ansible_host=10.148.0.12   ip=10.148.0.12
node3   ansible_host=10.148.0.13   ip=10.148.0.13

[kube-master]
node1
node2
node3

[etcd]
node1
node2
node3

[kube-node]
node1
node2
node3

[calico-rr]

[k8s-cluster:children]
kube-master
kube-node
calico-rr

setup kubespray ด้วย ansible-playbook

cd /home/nc-user/kubespray
ansible-playbook -i inventory/mycluster/inventory.ini --user nc-user --become --become-user=root cluster.yml

Install helm

ไปที่เครื่อง master node (K8S node1)
download script และ install

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh
bash install-helm.sh

setup tiller & set ClusterRoleBinding
สร้างไฟล์ชื่อ tiller.yml ด้วย content ดังนี้

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
--
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""
kubectl create -f tiller.yml
helm init --service-account tiller --upgrade

Install Nginx Ingress Controller

Login ไปยังเครื่อง master node (K8S node1)
Install nginx ingress controller ด้วย helm

helm install --name my-nginx stable/nginx-ingress --set controller.service.type=NodePort --set controller.publishService.enabled=true

เช็ค service port ที่เปิดจาก Ingress controller

kubectl get svc |grep ingress-controller
my-nginx-nginx-ingress-controller        NodePort    10.233.27.234   <none>        80:32393/TCP,443:31765/TCP   75m

Install & Setup Load Balancer

Login ไปยังเครื่อง Load Balancer
Install nginx

sudo apt update
sudo apt upgrade
sudo apt install -y nginx

config nginx ให้มายัง K8S cluster และ port ตาม Ingress

sudo vi /etc/nginx/sites-enabled/default
upstream k8s {
	server 10.148.0.11:32393;
	server 10.148.0.12:32393;
	server 10.148.0.13:32393;
}
server {
        listen 80;

        server_name _;

        location / {
                proxy_pass http://k8s;
                proxy_set_header        Host            $host;
                proxy_set_header        X-Forwarded-For $remote_addr;
        }

}
sudo systemctl reload nginx

Install & Setup NFS server

Login ไปยังเครื่อง NFS server

sudo apt update
sudo apt upgrade
sudo apt install -y nfs-server

เตรียม disk ที่จะใช้เก็บ data และเตรียม path ให้พร้อม
config nfs export ให้เครื่องใน private subnet สามารถ access read-write ได้ และ restart service

sudo vi /etc/exports
/exports        10.148.0.0/24(rw,sync,no_subtree_check,no_root_squash)
sudo systemctl restart nfs-server

Test Solutions

สร้าง deployment สำหรับทดสอบ ชื่อ hello-kubernetes-first.yaml
และ ingress ชื่อ hello-kubernetes-ingress.yaml

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes-first
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes-first
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-first
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-kubernetes-first
  template:
    metadata:
      labels:
        app: hello-kubernetes-first
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.5
        ports:
        - containerPort: 8080
        env:
        - name: MESSAGE
          value: Hello from the first deployment!
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-kubernetes-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: hello-kubernetes-first
          servicePort: 80
kubectl create -f hello-kubernetes-first.yaml
kubectl create -f hello-kubernetes-ingress.yaml

ทดสอบเข้าจาก PC ด้วย ip ของ Load Balancer

Was this article helpful?

Related Articles