Vagrant + Virtualbox 建置 k8s 筆記
Vagrant Build Image
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 
 | Vagrant.configure("2") do |config|
 config.vm.box = "bento/ubuntu-18.04"
 config.vm.box_version ='201912.14.0'
 config.vm.hostname = 'k8s-dev'
 config.vm.define vm_name = 'k8s'
 
 
 config.vm.provision "shell", privileged: false, inline: <<-SHELL
 set -e -x -u
 export DEBIAN_FRONTEND=noninteractive
 
 
 sudo apt-get update
 sudo apt-get install -y vim git cmake build-essential tcpdump tig jq socat bash-completion
 
 export DOCKER_VERSION="5:19.03.5~3-0~ubuntu-bionic"
 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"
 sudo apt-get update
 sudo apt-get install -y docker-ce=${DOCKER_VERSION}
 sudo usermod -aG docker $USER
 
 #Disable swap
 #https://github.com/kubernetes/kubernetes/issues/53533
 sudo swapoff -a && sudo sysctl -w vm.swappiness=0
 sudo sed '/vagrant--vg-swap/d' -i /etc/fstab
 
 
 git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
 bash ~/.bash_it/install.sh -s
 
 SHELL
 
 # 設定IP
 config.vm.network :private_network, ip: "172.17.8.111"
 #設定硬體
 config.vm.provider :virtualbox do |v|
 v.customize ["modifyvm", :id, "--cpus", 2]
 v.customize ["modifyvm", :id, "--memory", 4096]
 v.customize ['modifyvm', :id, '--nicpromisc1', 'allow-all']
 end
 end
 
 | 
安裝 Kubeadm Kubectl Kubelet
| 12
 3
 4
 5
 6
 7
 8
 
 | export KUBE_VERSION="1.17.0"sudo apt-get update && sudo apt-get install -y apt-transport-https curl
 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
 sudo apt-get update
 sudo apt-get install -y kubeadm=${KUBE_VERSION}-00 kubelet=${KUBE_VERSION}-00 kubectl=${KUBE_VERSION}-00
 
 | 
Service

初始化 Kubernetes Cluster
CNI 使用fannel
| 1
 | sudo kubeadm init --pod-network-cidr=10.244.0.0/16
 | 
| 12
 3
 4
 
 | mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
 | 
| 12
 3
 
 | kubeadm join 10.0.2.15:6443 --token h4927u.xc4i5epds3aw0kbs \
 --discovery-token-ca-cert-hash sha256:92787d0bba51786f879304229b07e2a58878bc775cbf12a6f9bf4e95a8794f97
 
 | 


coredns pending 原因是因為 CNI 還沒安裝,安裝Flannel (CNI)就會自動執行。
/etc/kubernetes/manifests kubeadmin 安裝玩會放對應設定到這個路徑,啟動 kubelet會參照這邊設定。
kubeadm(快速部屬工具)
Static /Dynamic 兩種安裝方式
| 1
 | sudo kubeadm init --pod-network-cidr=10.244.0.0/16
 | 
設定檔
| 1
 | kubectl -n kube-system get pods
 | 
取得資訊
Summary
幫 Bash 設定 kubectl 自動補齊
| 1
 | source <(kubectl completion bash)
 | 
| 1
 | kubectl get $resource_type $name
 | 
| 1
 | kubectl -n kube-system get pods
 | 
wide
describe
檢查常用這個指令
| 1
 | kubectl -n kube-system describe pods xxxx
 | 
Cluster Info
| 12
 3
 4
 5
 6
 7
 8
 
 | kubectl version
 kubectl cluster-info
 kubectl top node
 
 kubectl top pod
 
 kubectl api-versions
 
 | 
Interacting with Container
kubectl logs $name
kubectl -n kube-system -f logs $name
複製檔案
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | kubectl -n kube-system cp xxx node:ooo
 
 kubectl -n kube-system exec _pod_name_ ls
 
 kubectl -n kube-system exec _pod_name_ ip addr
 
 
 kubectl -n kube-system exec -it _pod_name_  sh
 
 | 
port-forward
| 1
 | sudo kubectl -n kube-system port-forward pod/coredns-xxxx 53:53
 | 
vagrant snapshot
每次 vagrant destroy 真的要花滿多時間,之前跟朋友聊到 snapshot(快照)回復VM會比較快,檔案也不會吃很多。我之前沒這麼使用過,今天花點時間測試。
大量指令參照Vagrant Boxes - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天這篇文章。
更多操作可以看Vagrant 學習筆記 - VagrantPi Blog
這邊注意 vagrant destroy會連帶刪除 snapshot
這邊注意 vagrant destroy會連帶刪除 snapshot
這邊注意 vagrant destroy會連帶刪除 snapshot
vagrant snapshot
我對 snapshot 很陌生,但沒想到使用上非常方便。
list
顯示有哪些 snapshot

save
儲存當下 vm snapshot。
| 1
 | vagrant snapshot save k8s(這邊是放 snapshot 名稱)
 | 

restore
回原 vm snapshot。
| 1
 | vagrant snapshot restore k8s(snapshot name)
 | 

delete
刪除 vm snapshot。
| 1
 | vagrant snapshot delete k8s(snapshot name)
 | 
push,pop
這邊跟 Git stash push/pop 很像,但我目前想不到什麼時候會用到這個,好處不需要想名稱,哈哈。
注意這邊不會影響到vagrant snapshot save指令新增的 snapshot。


vagrant port-forward
Vagrant forward a range of ports - Server Fault
Forwarded Ports - Networking | Vagrant by HashiCorp
備份
wordpress - Correct way to back-up and restore vagrant box + Variable VVV - Stack Overflow
使用 vagrant package 備份指令打包 VirtualBox 環境 - TerryL