Ubuntu 18.04 搭建單節點 k8s 記錄 (不需要科學上網的方案)

nfangxu發表於2019-06-01

ubuntu 安裝 k8s

安裝環境

  • 阿里雲伺服器: 1C2G
  • ubuntu 18.04
  • kubernetes 1.14.2
# 設定環境變數, 命令列看著舒服點
export PS1="\[\033[33m\]\u\[\033[0m\]@\[\033[36m\]k8s\[\033[0m\]:\[\033[32m\]\W \[\033[0m\]$ "

# vim 顯示行號
cat <<EOF > ~/.vimrc
set nu
EOF

# 一些初始配置
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common

# 寫入兩個 key
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

# 關閉 swap
swapoff -a
vim /etc/fstab # 註釋 01

# 設定阿里雲映象加速, 也可以不用弄這個
cat <<EOF >/etc/docker/daemon.json
{
    "registry-mirrors": ["https://{阿里雲分配的地址}.mirror.aliyuncs.com"]
}
EOF

# 安裝映象包
kubeadm config images list # 註釋 03

# 初始化
kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU # 註釋 02

# 根據初始化之後輸出的內容, 使用這個命令將其他節點加入叢集

# 設定網路外掛
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 安裝 kubernetes-dashboard
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/alternative/kubernetes-dashboard.yaml

# 拉取 kubernetes-dashboard 映象, 注意版本, 可在 kubernetes-dashboard.yaml 檔案中檢視
docker pull registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
docker tag registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
docker rmi registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1

# 安裝 kubernetes-dashboard
kubectl create -f kubernetes-dashboard.yaml

# 檢視安裝結果
kubectl get pod --namespace=kube-system

# 直接為 Dashboard 賦予 Admin 的許可權

# 新建 dashboard-admin.yaml 檔案, 注意縮排

cat <<EOF > dashboard-admin.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
EOF

# 安裝
kubectl create -f dashboard-admin.yaml

# 檢視埠
kubectl get svc --namespace=kube-system

# 單節點情況下, 無法操作節點
kubectl taint nodes --all node-role.kubernetes.io/master-

## END ######################################################

# 不直接為 Dashboard 賦予 Admin 的許可權
# 建立賬戶
kubectl create serviceaccount k8sadmin -n kube-system
kubectl create clusterrolebinding k8sadmin --clusterrole=cluster-admin --serviceaccount=kube-system:k8sadmin

# 檢視賬號是否建立成功
kubectl get sa --all-namespaces

# 獲取 Token 登陸
kubectl get secret -n kube-system | grep k8sadmin | cut -d "  " -f1 | xargs -n 1 | xargs kubectl get secret -o 'jsonpath={.data.token}' -n kube-system | base64 --decode

# 埠轉發, kubernetes-dashboard-54fb766c84-psnrh 是透過 `kubectl get pod --namespace=kube-system` 查出來的
kubectl port-forward kubernetes-dashboard-54fb766c84-psnrh 8443:8443 --namespace=kube-system &

註釋 01

# 註釋掉這一行
# /swapfile none swap sw 0 0

註釋 02

  • init 常用主要引數:

    • –kubernetes-version: 指定Kubenetes版本,如果不指定該引數,會從google網站下載最新的版本資訊。
    • –pod-network-cidr: 指定pod網路的IP地址範圍,它的值取決於你在下一步選擇的哪個網路網路外掛,比如我在本文中使用的是 flannel 網路,需要指定為10.244.0.0/16。
    • –apiserver-advertise-address: 指定master服務釋出的Ip地址,如果不指定,則會自動檢測網路介面,通常是內網IP。

      kubeadm init 輸出的token用於master和加入節點間的身份認證,token是機密的,需要保證它的安全,因為擁有此標記的人都可以隨意向叢集中新增節點。

  • 如果只有一個 cpu 請加引數: --ignore-preflight-errors=NumCPU

註釋 03

k8s-pull.sh

# 將對應的包, 從國內映象上拉下來
for  i  in  `kubeadm config images list`;  do
    imageName=${i#k8s.gcr.io/}
    docker pull registry.aliyuncs.com/google_containers/$imageName
    docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章