kubernetes部署教程(國內部署kubernetes集群的最佳實踐)
2023-04-13 21:25:02 8
項目github地址:https://github.com/usualheart/install_k8s_official
在國內環境下,藉助阿里鏡像源,按照官方的指導,使用腳本一步一步安裝kubernetes。
參考教程
【官方】在ubuntu上安裝Docker
https://docs.docker.com/engine/install/ubuntu/
【官方】安裝kubeadm
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
【官方】通過kubeadm創建一個單控制面板的集群
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm
版本說明
當前教程所安裝的k8s、docker均默認為最新穩定版本(當前k8s最新約v1.18)
如果需要安裝比較舊的版本,需要確保k8s與docker之間兼容,並在安裝時指定版本
具體安裝方法參見github項目地址中關於如何安裝指定版本k8s的說明。
準備工作# 下載倉庫代碼到本地git clone https://github.com/usualheart/install_k8s_official.git# 打開文件夾cd install_k8s_official# 配置阿里ubuntu源 可選./ali_ubuntu_sources/set_ali_sources.sh# 暫時關閉swap (利用 vi /etc/fstab 將swap一行注釋掉並重啟即可永久關閉)sudo swapoff -a
安裝配置dockerinstall_docker_for_ubuntu1604.sh按照Docker官方指導,為ubuntu安裝docker配置docker
注意:docker安裝完成後需要配置cgroup驅動為systemd來增強穩定性 具體說明參考:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/
# Set up the Docker daemoncat > /etc/docker/daemon.json <<EOF{ "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2"}EOF
mkdir -p /etc/systemd/system/docker.service.d
# Restart Dockersystemctl daemon-reloadsystemctl restart docker
安裝kubeadm kubelet kubectlkubeadm_install.sh按照k8s官方指導,安裝kubeadm、kubelet、kubectlkubeadm_install_from_ali.sh按照阿里官方指導,設置kubernetes阿里源,同時安裝kubeadm、kubelet、kubectl。初始化k8s集群master使用kubeadm初始化一個master 可以通過修改kubernetes-version來指定kubernetes版本 也可以編寫一個yaml配置文件來實現更複雜的自定義
sudo kubeadm init --apiserver-advertise-address 192.168.56.101 --image-repository=registry.aliyuncs.com/google_containers
--image-repository選項指定了自定義的鏡像倉庫來代替gcr.io 避免國內無法下載的問題
更多細節可以參考k8s官方文檔對kubeadm init的說明
一些配置
在主節點執行:
# To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
安裝pod網絡插件這裡安裝calico插件
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
在這一步容易出現拉取calico鏡像失敗的問題,手動拉取:
docker pull calico/cni:v3.14.1
啟用主節點調度kubectl taint nodes --all node-role.kubernetes.io/master-
打開後pod會調度在主節點運行,這步執行完成後相當於擁有了一個單節點kubernetes
加入節點 以構建多節點k8s集群
在其它虛擬機上邊安裝好相應的docker kubeadm後執行下面的步驟加入到主節點,實現多節點的k8s集群。
kubeadm join --token : --discovery-token-ca-cert-hash sha256:
參數1:
如果沒有token可以在主節點上運行下邊的命令得到:
kubeadm token list
輸出結果類似於這個:
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS8ewj1p.9r9hcjoqgajrj4gi 23h 2018-06-12T02:51:28Z authentication, The default bootstrap system: signing token generated by bootstrappers: 'kubeadm init'. kubeadm: default-node-token
默認token 24小時過期。如果你在token已經過期後才加入到一個集群,可以通過在主節點上邊運行下邊的指令來創建一個新的token:
kubeadm token create
輸出類似於:
5didvk.d09sbcov8ph2amjw
參數2::
填主節點的ip地址,或者主節點的hostname(如果填hostname需要保證可以通過hostname訪問到主節點)control-plane-port一般默認是6443參數3:--discovery-token-ca-cert-hash
如果你不知道--discovery-token-ca-cert-hash的值,可以通過運行下邊的命令在主節點上得到:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
結果輸出類似於:
8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78
ipv6相關的注意
Note: To specify an IPv6 tuple for :, IPv6 address must be enclosed in square brackets, for example: [fd00::101]:2073.
加入結果
填好參數的一個例子:
kubeadm join --token dj7ard.mtehsr9qts4mwgkg 192.168.0.102:6443 --discovery-token-ca-cert-hash sha256:be2258c8445d1eeeac88576b0a62a86bd2575fb991675853c97ef0df79666f38
kubeadm join命令執行後的結果應當如下所示:
[preflight] Running pre-flight checks... (log output of join workflow) ...Node join complete:* Certificate signing request sent to control-plane and response received.* Kubelet informed of new secure connection details.Run 'kubectl get nodes' on control-plane to see this machine join.
幾秒鐘之後,應當可以在主節點上通過運行kubectl get nodes看到新節點已經加入了。
,