K8S部署三種方式:
minikube
用在測試
kubeadm部署(主要用在測試線,搭建簡單,但現在發展很好也可以用在生產)
kubeadm是一個K8s部署工具,提供kubeadm init和kubeadm join,用於快速部署Kubernetes集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二進制部署(主要用在生產)
推薦安裝,從github下載發行版的二進制包,手動部署每個組件,組成Kubernetes集群。
kubeadm降低部署門檻,但屏蔽了很多細節,遇到問題很難排查。如果想更容易可控,推薦使用二進制包部署Kubernetes集群,雖然手動部署麻煩點,期間可以學習很多工作原理,也利於后期維護。
Kubeadm方式搭建
一、准備環境
1.1 服務器要求:
1、三台服務器:1個master:192.168.50.10,2個node:192.168.50.11、192.168.50.13 建議最小硬件配置:2核cpu、2G內存、30G硬盤 2、可以訪問外網 3、服務器之間網絡互通(在一個網段) 4、安裝阿里雲yum源(阿里雲yum可以下載k8s的flannel組件) 1.2 軟件環境:centos7.x_x64、docker-ce v20、k8s v1.22.3 1.3 服務器整體規划 單master集群
二、服務器環境初始化
關閉防火牆(清空防火牆規則)
systemctl stop firewalld
systemctl disable firewalld
關閉selinux(關閉安全機制)
setenforce 0 #臨時關閉 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config #永久 關閉swap(必須關閉) swapoff -a #臨時關閉 sed -ri 's/.*swap.*/#&/' /etc/fstab #永久 設置hostname 192.168.50.10 hostnamectl set-hostname k8s-master 192.168.50.11 hostnamectl set-hostname k8s-node1 192.168.50.13 hostnamectl set-hostname k8s-node2 添加host:(在host文件末尾添加) cat >> /etc/hosts <<EOF 192.168.50.10 k8s-master 192.168.50.11 k8s-node1 192.168.50.13 k8s-node2 EOF 將橋接的ipv4流量傳遞到iptables的鏈: cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system #生效 時間同步: yum install -y ntpdate ntpdate us.pool.ntp.org 添加k8s yum源 cat >/etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes Repo baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF 安裝kubelet、kubeadm、kubectl yum install -y kubelet-1.22.3 kubeadm-1.22.3 kubectl-1.22.3 systemctl enable kubelet
三、快速部署K8S集群
master節點
kubeadm init \
--apiserver-advertise-address=192.168.50.10 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.22.3 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 kubeadm init的引導過程: 檢查系統環境是否滿足 下載鏡像 為kubelet創建配置文件並啟動 為apiserver、etcd生成證書(/etc/kubernetes/pki) 生成連接apiserver的kubeconfig文件 容器啟動master組件 將涉及的配置文件存儲到configmap 設置master節點不可調度(打污點) 啟用boostrap自動為kubelet頒發證書 安裝插件:coreDNS、kube-proxy 提示拷貝連接集群的配置文件 拷貝連接集群的配置文件admin.conf: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config node節點 向集群添加新節點,執行kubeadm init輸出的kubeadm join命令:
kubeadm join kubeadm join 192.168.50.10:6443 --token iukvkm.x2w42yvm5ctlqo5p --discovery-token-ca-cert-hash sha256:650a0636e03ac97de14a61ccc8dc99ebecfac412c16af74a7912968d0a95b3e2
#如果當時沒記下這個命令,可以用kubeadm命令重新生成:kubeadm token create --print-join-command kubectl get node #查看集群節點狀態 kubectl get pods -n kube-system #查看pod狀態 -n 指定命名空間 kubectl get ns #查看命名空間 k8s日志位置:/var/log/messages
清空k8s環境:(如果k8s安裝出錯,想重新安裝。master、node都執行)
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
四、安裝pod網絡插件(CNI) master執行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
確保能夠訪問到quay.io這個registry(需要用阿里雲yum源才可訪問下載)
(如果pod鏡像下載失敗,可以改成這個鏡像地址(在kube-flannel.yml文件中):lizhenliang/flannel:v0.11.0-amd64) kubectl get pod --all-namespaces //查看pod是否是running狀態 kubectl get nodes 查看節點信息
五、部署UI界面(master執行)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
默認dashboard只能集群內部訪問,修改Service為Nodeport類型,暴露到外部
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30001 selector: k8s-app: kubernetes-dashboard 訪問地址:https://192.168.50.10:30001 kubectl get svc -n kubernetes-dashboard #查看命名空間下pod的對外端口等信息 獲取登錄dashboard的token kubectl describe secret -n kubernetes-dashboard //詳細查看dashboard的token 創建service account並綁定默認cluster-admin管理員集群角色: kubectl create serviceaccount dashboard-admin -n kube-system #創建賬號 kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin #將賬號綁定到系統角色上 kubectl descibe secrets -n kube-system dashboard-admin #獲取賬號產生的token,使用輸出的token登錄dashboard 替換自簽證書:解決k8s UI界面只能在火狐瀏覽器訪問的問題 證書分為: 1、自簽證書 cfssl、openssl 2、權威機構頒發,例如賽門鐵克、沃通 kubeadm部署 1、刪除默認的secret,用自簽證書創建新的secret kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/apiserver.key --from-file=/etc/kubernetes/pki/apiserver.crt 2、修改dashboard.yaml文件,在args下面增加證書倆行 args: - --auto-generate-certificates - --tls-key-file=apiserver.key - --tls-cert-file=apiserver.crt kubectl apply -f kubernetes-dashboard.yaml #讓yaml文件生效 測試:創建nginx測試集群 kubectl create deployment nginx --image=nginx #創建pod kubectl expose deployment nginx --port=80 --type=NodePort #暴露服務 kubectl get deploy,pod,svc #查看資源信息