1. 程式人生 > 其它 >使用kubeadm方式部署K8S叢集

使用kubeadm方式部署K8S叢集

一、什麼是kubernets

Kubernetes簡介
Kubernetes是容器叢集管理系統,是一個開源的平臺,可以實現容器叢集的自動化部署、自動擴縮容、維護等功能。
快速部署應用
快速擴充套件應用
無縫對接新的應用功能
節省資源,優化硬體資源的使用

Kubernetes 特點

可移植: 支援公有云,私有云,混合雲,多重雲(multi-cloud)
可擴充套件: 模組化, 外掛化, 可掛載, 可組合
自動化: 自動部署,自動重啟,自動複製,自動伸縮/擴充套件
傳統的應用部署方式是通過外掛或指令碼來安裝應用。這樣做的缺點是應用的執行、配置、管理、所有生存週期將與當前作業系統繫結,這樣做並不利於應用的升級更新/回滾等操作,當然也可以通過建立虛機的方式來實現某些功能,但是虛擬機器非常重,並不利於可移植性。

新的方式是通過部署容器方式實現,每個容器之間互相隔離,每個容器有自己的檔案系統 ,容器之間程序不會相互影響,能區分計算資源。相對於虛擬機器,容器能快速部署,由於容器與底層設施、機器檔案系統解耦的,所以它能在不同雲、不同版本作業系統間進行遷移。

容器佔用資源少、部署快,每個應用可以被打包成一個容器映象,每個應用與容器間成一對一關係也使容器有更大優勢,使用容器可以在build或release 的階段,為應用建立容器映象,因為每個應用不需要與其餘的應用堆疊組合,也不依賴於生產環境基礎結構,這使得從研發到測試、生產能提供一致環境。類似地,容器比虛機輕量、更“透明”,這更便於監控和管理。

二、Kubernets本地化部署方式

1.minikube

Minikube是一個工具,可以在本地快速執行一個單點的Kubernetes,嘗試Kubernetes或日常開發的使用者使用。不能用於生產環境。

官方地址:https://minikube.sigs.k8s.io/docs/start/

2.kubeadm

Kubeadm也是一個工具,提供kubeadm init和kubeadm join,用於快速部署Kubernetes叢集。

官方地址:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/

三、部署環境

根據實際需要部署生產環境K8S叢集,所以選取kubeadm部署方式

四、docker-ce安裝

1.下載docker-ce倉庫 wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 2.替換docker-ce倉庫伺服器地址 替換docker_repo vim docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ %s@https://download.docker.com/@https://mirrors.tuna.tsinghua.edu.cn/docker-ce/@ 3.刪除舊版本docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker \ docker-ce \ docker-ee 4.安裝docker-ce yum install docker-ce 5.增添阿里雲映象加速器並設定cgroupdriver mkdir -p /etc/docker vim/etc/docker/daemon.json { "registry-mirrors": ["https://4e2n79y3.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"] } 6.重啟docker服務 systemctl daemon-reload systemctl restart docker systemctl enable docker 7.修改docker預設儲存位置 vim /etc/systemd/system/multi-user.target.wants/docker.service ExecStart=/usr/bin/dockerd --graph=/data/docker 8.iptable橋轉發功能開啟 echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables echo 1 > /proc/sys/net/ipv4/ip_forward

五、kubernets部署

1.master主機操作 1.1安裝kubelet kubeadm kubectl 配置k8s倉庫 cd /etc/yum.repos.d/ vim kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 檢視安裝包版本 yum list kubelet --showduplicates yum安裝kubelet、kubeadm、kubectl yum install -y --nogpgcheckkubelet-1.20.2-0 kubeadm-1.20.2-0 kubectl-1.20.2-0 設定開機啟動kubelet systemctl enable kubelet 設定忽略swap vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--fail-swap-on=false" 設定可以用tab補齊鍵 yum install bash-completion.noarch -y vim /etc/profile source <(kubectl completion bash) source /etc/profile 1.2 初始化master 關閉swap swapoff -a 初始化部署 kubeadm init --kubernetes-version=v1.20.2 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 建立配置檔案 mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 編輯靜態node叢集元件 cd/etc/kubernetes/manifests vimkube-controller-manager.yaml vimkube-scheduler.yaml spec: containers: - command: - kube-scheduler - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf - --bind-address=127.0.0.1 - --kubeconfig=/etc/kubernetes/scheduler.conf - --leader-elect=true #- --port=0 2.node主機操作 2.1安裝kubelet kubeadm 配置k8s倉庫 cd /etc/yum.repos.d/ vim kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg yum安裝kubelet、kubeadm yum install -y --nogpgcheckkubelet-1.20.2-0 kubeadm-1.20.2-0 kubectl-1.20.2-0 2.2 node加入叢集 kubeadm join 192.168.8.241:6443 --token z89jkt.taqmtwrm9y13grtc--discovery-token-ca-cert-hash sha256:cecc1fcbb3c848878fc204fa2b938cf0f15283f61d47bf5a4c4acca3227cffe2 重新建立token(如果忘記token) kubeadm token create --print-join-command 3.master主機操作 3.1部署網路外掛(https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-on-nodes) 下載calico cd /usr/local/k8s curl https://docs.projectcalico.org/manifests/calico.yaml -O 修改calico配置清單 vimcalico.yaml # The default IPv4 pool to create on startup if none exists. Pod IPs will be # chosen from this range. Changing this value after installation will have # no effect. This should fall within `--cluster-cidr`. - name: CALICO_IPV4POOL_CIDR value: "10.244.0.0/16" - name: IP_AUTODETECTION_METHOD value: "interface=ens33"# ens 根據實際網絡卡開頭配置 建立calico kubecl -f calico.yaml 3.2.部署metric server 下載metrics /usr/local/src/k8s/ curl -Ls https://api.github.com/repos/kubernetes-sigs/metrics-server/tarball/v0.3.6 -o metrics-server-v0.3.6.tar.gz 解壓metrics tar -xvfmetrics-server-v0.3.6.tar.gz 修改metrics清單配置 cd /usr/local/src/k8s/kubernetes-sigs-metrics-server-d1f4f6f/deploy/1.8+ vimmetrics-server-deployment.yaml containers: - name: metrics-server image: k8s.gcr.io/metrics-server-amd64:v0.3.6 imagePullPolicy: Always command: - /metrics-server - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP 建立metrics kubectl apply -fmetrics-server-deployment.yaml