Ubuntu 搭建 k8s 記錄 (不需要科學上網) 2.0 版本

nfangxu發表於2019-07-31

阿里雲 Ubuntu 伺服器安裝 k8s 全記錄

  • Github 地址: https://github.com/nfangxu/k8s

  • 前期準備

    • 一臺伺服器, 開放了 80 / 443 埠 (可以多準備幾臺節點伺服器, 內網互通的那種)

    • 一個域名, 與之相對應的 ssl 證照 (kubernetes-dashboard 需要 https 才能登陸, http 會出問題, 具體問題請自己踩坑)

  • 參考文件

  • 注意

    • 以下會安裝 asciinema 這個東西, 可以記錄下你在命令列操作的所有步驟, 可以用來查錯, 如果不需要, 可以不用裝

    • 設定 PS1 環境變數, 只是看起來舒服一點, 跟 k8s 沒一毛錢關係

    • 本文所使用的伺服器配置為 1c2G 配置, 環境為 ubuntu, 新裝的系統 乾淨的不要不要的, 如果你不是乾淨的系統, 自己掂量著辦吧

準備工作


# vim 設定行號
cat <<EOF > ~/.vimrc
set nu
EOF

# 設定預設 PS1
echo 'export PS1="\[\033[33m\]\u\[\033[0m\]@\[\033[36m\]k8s\[\033[0m\]:\[\033[32m\]\W \[\033[0m\]$ "' >> ~/.bashrc

source ~/.bashrc

# 基礎依賴包
apt update && apt -y install apt-transport-https ca-certificates curl software-properties-common

# asciinema 映象源
# apt-add-repository ppa:zanchey/asciinema

# docker 和 k8s 映象源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

cat <<EOF >/etc/apt/sources.list.d/docker-k8s.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable
EOF

# 安裝基礎軟體
apt update && apt install -y docker-ce kubelet kubeadm kubectl # && apt install -y asciinema

# 關閉 swap, 不關閉的話, k8s 會報錯
swapoff -a
vim /etc/fstab # 註釋掉 # /swapfile none swap sw 0 0

初始化

# 如果你可以科學上網, 可以不用設定 --image-repository 
# 如果你伺服器的 CPU >= 2 可以不用設定 --ignore-preflight-errors=NumCPU
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU --image-repository=registry.aliyuncs.com/google_containers

# 設定環境變數並使其生效
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> ~/.bashrc
source ~/.bashrc

# 主節點不允許部署node, 如果有多臺伺服器, 請忽略這個命令
kubectl taint nodes --all node-role.kubernetes.io/master-

# 檢視相關狀態 # --all-namespaces 可以替換為 -n <namespaces>
kubectl get nodes -A # 等價於 kubectl get nodes --all-namespaces
kubectl get pods -A # 等價於 kubectl get pods --all-namespaces 
kubectl get svc -A # 等價於 kubectl get services --all-namespaces 
kubectl get deploy -A # 等價於 kubectl get deployments --all-namespaces 

對外訪問


# 安裝網路外掛, 網路外掛有好多種, 這裡使用的是 kube-flannel
# 官方配置: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 直接複製過來的
kubectl apply -f kube-flannel.yml

# 安裝 nginx-ingress, ingress 有好多個, 這裡使用 nginx-ingress
# 官方配置: https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
# 直接複製過來的, 加了一個 hostNetwork: true 配置, 不加這個配置, 不會監聽主機的 80/443 埠
kubectl apply -f nginx-ingress-controller.yml

# 安裝 dashboard, 並使用 ingress 轉發 dashboard
# 官方配置: https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta6/aio/deploy/recommended.yaml
# dashboard-deployment.yaml 是上面連結直接複製過來的, 改了一個許可權, 162 行
# ingress 自己寫的, 修改域名
kubectl apply -f dashboard/

# 配置 ssl 證照
kubectl -n kubernetes-dashboard create secret tls dashboard-tls \
  --key /certs/k8s.nfangxu.cn.key \
  --cert /certs/k8s.nfangxu.cn.pem

# 獲取登入 Token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep kubernetes-dashboard | awk '{print $1}')

# 檢視賬戶狀態
kubectl get serviceaccounts kubernetes-dashboard -o yaml -n kubernetes-dashboard
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章