kubeadm部署一主兩從的kubernetes叢集
kubernetes叢集大體上分為兩類:一主多從和多主多從。
一主多從:一臺Master節點和多型Node節點,搭建簡單,但是有單機故障風險,適合用於測試環境
多主多從:多臺Master節點和多型Node節點,搭建麻煩,適合用於生產環境
本文采用kubeadm部署一主兩從的kubernetes叢集,供測試使用,幷包含了網路外掛和一個簡單nginx服務部署的例子
一、禁用swap分割槽
swapoff -a
swap分割槽指的是虛擬記憶體分割槽,它的作用是在實體記憶體使用完畢後,將磁碟空間虛擬成記憶體來使用
啟動swap裝置會對系統的效能產生非常負面的影響,這裡把swap分割槽關閉
vim /etc/fstab
註釋掉最後一行
二、安裝docker(三個節點)
1.切換映象源
wget
2.檢視前映象源中支援的docker版本
yum list docker-ce --showduplicates
3.安裝指定版本docker(帶上–setopt=obsoletes=0,使用指定版本)
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
4.新增配置檔案
Docker在預設情況下使用的Cgroup Driver為cgroupfs,而kubernetes推薦使用systemd來代替cgroupfs
mkdir /etc/docker cat <<EOF > /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["] } EOF
5.啟動docker
systemctl restart docker systemctl enable docker
三、安裝kubernetes元件(三個節點)
1.配置映象源
vim /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl= enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=
2.安裝指定版本的kubeadm,kubelet和kubectl
yum install --setopt=obsoletes=0 kubeadm-1.23.6-0 kubelet-1.23.6-0 kubectl-1.23.6-0 -y
3.修改/etc/sysconfig/kubelet的內容,將裡邊內容替換
vim /etc/sysconfig/kubelet KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs"
4.設定kubelet開機自啟
systemctl enable kubelet
四、準備叢集映象
這步是為第五步的kubeadm init做準備,因為init會拉取映象,而此映象在kubernetes的倉庫中,由於網路原因,無法連線,因此用如下方法
vim ima.sh
新增內容
images=( kube-apiserver:v1.23.6 kube-controller-manager:v1.23.6 kube-scheduler:v1.23.6 kube-proxy:v1.23.6 pause:3.6 etcd:3.5.1-0 coredns:v1.8.6 ) for list in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$list docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$list k8s.gcr.io/$list done docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
sh ima.sh
五、叢集初始化(主節點)
1.主節點建立叢集
kubeadm init \ --kubernetes-version=v1.23.6 \ --pod-network-cidr=10.0.0.0/16 \ --service-cidr=10.0.0.0/12 \ --apiserver-advertise-address=172.20.10.6
記錄下最後結尾的幾個命令
如果初始化失敗了,使用如下命令清理環境,並重新初始化
kubeadm reset
rm -rf $HOME/.kube
systemctl restart kubelet
2.建立必要檔案
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
六、備機初始化
使用kubeadm init 結尾提示的kubeadm join語句初始化備機,如果忘記kubeadm join語句可以透過如下命令在主節點獲取join命令引數:
kubeadm token create --print-join-command
在兩個備機執行改語句,加入叢集,結果如下:
提示在control-plane執行kubectl get nodes檢視節點狀態,即在主節點執行,發現節點的status都是NotReady的狀態,這是因為沒有安裝網路外掛的原因。
kubectl get nodes
七、安裝網路外掛——calico
kubernetes支援多種網路外掛,比如flannel、calica、canal等等,任選一種使用即可,本次選擇calico。
網路外掛沒有安裝的話,節點是
NotReady 狀態,因為CoreDNS沒有網路外掛分配不到IP地址,會一直處於Pending狀態
如果沒有這個外掛,kubedns無法啟動,pod之間就無法通訊。
只在主節點執行即可,外掛使用的是DaemonSet的控制器,它會在每個節點上都執行。
1.獲取配置檔案並apply
curl -O
2.檢視服務狀態,都是running了
再次檢視節點狀態,發現所有的節點都是
Ready 的狀態了
八、部署CoreDNS
git clone yum -y install epel-release yum -y install jq cd deployment/kubernetes/ ./deploy.sh -i 10.0.0.254 > coredns.yaml kubectl apply -f coredns.yaml
用命令檢視狀態,發現pod處於ContainerCreating狀態
kubectl get pod,svc -A
使用kubectl describe檢視該coredns的pod,發現在拉取coredns的映象,稍微等待一會。
kubectl describe pod coredns-799bc9dbc6-m7q4t -n kube-system
等待一會後檢視events,發現終於拉取成功了
檢視pod和svc狀態,都是running的
kubectl get pod,svc -A
九、kubernetes-dashboard的部署
1.獲取yaml檔案
wget
2.增加配置,使Dashboard暴露到外部
vim recommended.yaml
因為預設Dashboard只能叢集內部訪問,修改Service為NodePort型別,暴露到外部
3.apply修改後的recommended.yaml
kubectl apply -f recommended.yaml
4.檢視kubernetes-dashboard的pod狀態,都已經是running的
kubectl get pods -n kubernetes-dashboard
5.訪問網址
我的主節點地址為172.20.10.6,因此訪問
6.建立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
獲取使用者Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
7.使用輸出的token登入Dashboard。
可以檢視當前k8s的相關資訊,例如nodes,namespace等
十、使用k8s簡單部署一個nginx
1.根據yaml建立namespace
vim nginx-namespace.yaml 內容如下 apiVersion: v1 #型別為Namespace kind: Namespace #型別為Namespace metadata: name: ns-test #名稱空間名稱 labels: name: label-test #pod標籤
建立namespace
[root@pg01 ~]# kubectl create -f nginx-namespace.yaml namespace/ns-test created
查詢namespace
[root@pg01 ~]# kubectl get namespace NAME STATUS AGE default Active 92m kube-node-lease Active 92m kube-public Active 92m kube-system Active 92m kubernetes-dashboard Active 21m ns-test Active 5s
2.建立pod
一般不直接create pod,而是透過controller來建立pod。deployment為其中一種controller
拉取nginx映象
docker pull nginx
編輯pod的yaml檔案
vim nginx-deployment.yaml
內容如下
apiVersion: apps/v1 kind: Deployment metadata: namespace: ns-test name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
建立
kubectl create -f nginx-deployment.yaml
查詢
kubectl get pods -n ns-test kubectl get deployment -n ns-test
nginx-deployment 部署的2個 pod 全部成功
檢視兩個nginx分配的ip
kubectl get pods -o wide -n ns-test
訪問測試
curl
3.建立service
建立對應yaml檔案
vim nginx-service.yaml
內容如下
apiVersion: v1 kind: Service metadata: namespace: ns-test name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80
建立service
kubectl create -f nginx-service.yaml
檢視service
kubectl get svc nginx-service -o wide -n ns-tes
訪問測試
4.暴露埠部署nginx服務
nginx-service.yaml檔案如下
apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx-service namespace: ns-test spec: ports: - port: 9000 name: nginx-service protocol: TCP targetPort: 80 # 容器nginx對外開放的埠 上面的dm已經指定了 nodePort: 31090 #外網訪問的埠 selector: app: nginx type: NodePort
部署服務
kubectl create -f nginx-service.yaml
檢視服務和埠
kubectl get svc nginx-service -n ns-test
測試如下
瀏覽器用主節點所在的ip訪問k8s的nginx,我的主節點ip為172.20.10.6,則訪問,結果如下
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2895114/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 拆除kubeadm部署的Kubernetes 叢集
- 使用 Kubeadm+Containerd 部署一個 Kubernetes 叢集AI
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- Kubernetes — 在 OpenStack 上使用 kubeadm 部署高可用叢集
- kubeadm部署kubernetes v1.29.0叢集(k8s1.29.0)K8S
- 使用Kubeadm搭建高可用Kubernetes叢集
- Ubuntu上kubeadm安裝Kubernetes叢集Ubuntu
- 使用 kubeadm 建立 kubernetes 叢集 v1.21
- kubeadm部署K8S叢集K8S
- 【Kubernetes學習筆記】-kubeadm 手動搭建kubernetes 叢集筆記
- 升級 kubeadm 部署的 k8s 叢集K8S
- 【kubernetes叢集系列(二)】Worker(node)安裝(使用kubeadm)
- 虛擬機器vmare使用sealos快速搭建kubernetes(k8s)叢集,一主兩從虛擬機K8S
- 通過kubeadm工具部署k8s叢集K8S
- Kubernetes部署叢集Mysql服務MySql
- 在 Azure 上部署 Kubernetes 叢集
- 在kubernetes上部署consul叢集
- 通過kubeadm部署Kubernetes v1.13.5生產可用叢集環境(無需翻牆)
- kubernetes使用StatefulSet部署mysql一主多從MySql
- 附003.Kubeadm部署Kubernetes
- 使用kubeadm安裝kubernetes叢集指令碼(更新日期:2024.7.19)指令碼
- MySQL叢集之 主從複製 主主複製 一主多從 多主一叢 實現方式MySql
- redis主從叢集搭建及容災部署(哨兵sentinel)Redis
- 將 .NET Aspire 部署到 Kubernetes 叢集
- 在 Azure 中部署 Kubernetes 容器叢集
- 基於containerd 部署 kubernetes 1.28叢集AI
- CentOS 7.9 環境下搭建k8s叢集(一主兩從)CentOSK8S
- wsl2 ubuntu20.04 上使用 kubeadm 建立一個單主叢集Ubuntu
- 使用kubeadm安裝kubernetes 1.13高可用叢集(使用calico網路)
- redis叢集之主從複製叢集的原理和部署Redis
- 使用kubeadm部署高可用IPV4/IPV6叢集
- 基於Dokcer搭建Redis叢集(主從叢集)Redis
- Kubernetes叢集部署史上最詳細(二)Prometheus監控Kubernetes叢集Prometheus
- 部署Kubernetes v1.22.10高可用叢集
- Kubernetes 部署 Nebula 圖資料庫叢集資料庫
- 教你在Kubernetes中快速部署ES叢集
- 基於Ubuntu部署企業級kubernetes叢集---k8s叢集容部署UbuntuK8S
- Kubernetes實戰:高可用叢集的搭建和部署