Vagrant + Virtualbox 建置 k8s 筆記
Vagrant Build Image
1 2 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
1 2 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
|
1 2 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
|
1 2 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
1 2 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
複製檔案
1 2 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