日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Kubeadm部署一主兩從的Kubernetes集群

kubeadm部署一主兩從的Kubernetes集群

作者:小怪獸ysl 2022-06-02 14:18:44

云計(jì)算

云原生 本文采用kubeadm部署一主兩從的kubernetes集群,供測試使用,并包含了網(wǎng)絡(luò)插件和一個(gè)簡單nginx服務(wù)部署的例子。

洪江網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司于2013年開始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

kubernetes集群大體上分為兩類:一主多從和多主多從。

一主多從:一臺Master節(jié)點(diǎn)和多臺Node節(jié)點(diǎn),搭建簡單,但是有單機(jī)故障風(fēng)險(xiǎn),適合用于測試環(huán)境。

多主多從:多臺Master節(jié)點(diǎn)和多臺Node節(jié)點(diǎn),搭建麻煩,適合用于生產(chǎn)環(huán)境。

本文采用kubeadm部署一主兩從的kubernetes集群,供測試使用,并包含了網(wǎng)絡(luò)插件和一個(gè)簡單nginx服務(wù)部署的例子。

一、禁用swap分區(qū)

swapoff -a

swap分區(qū)指的是虛擬內(nèi)存分區(qū),它的作用是在物理內(nèi)存使用完畢后,將磁盤空間虛擬成內(nèi)存來使用。

啟動(dòng)swap設(shè)備會對系統(tǒng)的性能產(chǎn)生非常負(fù)面的影響,這里把swap分區(qū)關(guān)閉。

vim /etc/fstab

注釋掉最后一行。

二、安裝docker(三個(gè)節(jié)點(diǎn))

1、切換鏡像源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

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在默認(rèn)情況下使用的Cgroup Driver為cgroupfs,而kubernetes推薦使用systemd來代替cgroupfs。

mkdir /etc/docker

cat < /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

5、啟動(dòng)docker

systemctl restart docker
systemctl enable docker

三、安裝kubernetes組件(三個(gè)節(jié)點(diǎn))

1、配置鏡像源

vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyum.com/kubernetes/yum/doc/rpm-package-key.gpg

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的內(nèi)容,將里邊內(nèi)容替換

vim /etc/sysconfig/kubelet
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

4、設(shè)置kubelet開機(jī)自啟

systemctl enable kubelet

四、準(zhǔn)備集群鏡像

這步是為第五步的kubeadm init做準(zhǔn)備,因?yàn)閕nit會拉取鏡像,而此鏡像在kubernetes的倉庫中,由于網(wǎng)絡(luò)原因,無法連接,因此用如下方法。

vim ima.sh

添加內(nèi)容。

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

五、集群初始化(主節(jié)點(diǎn))

1、主節(jié)點(diǎn)創(chuàng)建集群

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

記錄下最后結(jié)尾的幾個(gè)命令。

如果初始化失敗了,使用如下命令清理環(huán)境,并重新初始化。

kubeadm reset

rm -rf $HOME/.kube

systemctl restart kubelet

2、創(chuàng)建必要文件

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

六、備機(jī)初始化

使用kubeadm init 結(jié)尾提示的kubeadm join語句初始化備機(jī),如果忘記kubeadm join語句可以通過如下命令在主節(jié)點(diǎn)獲取join命令參數(shù):

kubeadm token create --print-join-command

在兩個(gè)備機(jī)執(zhí)行改語句,加入集群,結(jié)果如下:

提示在control-plane執(zhí)行kubectl get nodes查看節(jié)點(diǎn)狀態(tài),即在主節(jié)點(diǎn)執(zhí)行,發(fā)現(xiàn)節(jié)點(diǎn)的status都是NotReady的狀態(tài),這是因?yàn)闆]有安裝網(wǎng)絡(luò)插件的原因。

kubectl get nodes

七、安裝網(wǎng)絡(luò)插件——calico

kubernetes支持多種網(wǎng)絡(luò)插件,比如flannel、calica、canal等等,任選一種使用即可,本次選擇calico。

網(wǎng)絡(luò)插件沒有安裝的話,節(jié)點(diǎn)是 NotReady 狀態(tài),因?yàn)镃oreDNS沒有網(wǎng)絡(luò)插件分配不到IP地址,會一直處于Pending狀態(tài)。

如果沒有這個(gè)插件,kubedns無法啟動(dòng),pod之間就無法通信。

只在主節(jié)點(diǎn)執(zhí)行即可,插件使用的是DaemonSet的控制器,它會在每個(gè)節(jié)點(diǎn)上都運(yùn)行。

1、獲取配置文件并apply

curl ??https://projectcalico.docs.tigera.io/manifests/calico.yaml?? -O。

2、查看服務(wù)狀態(tài),都是running了

再次查看節(jié)點(diǎn)狀態(tài),發(fā)現(xiàn)所有的節(jié)點(diǎn)都是 Ready 的狀態(tài)了。

八、部署CoreDNS

git clone https://github.com/coredns/deployment.git
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

用命令查看狀態(tài),發(fā)現(xiàn)pod處于ContainerCreating狀態(tài)。

kubectl get pod,svc -A

使用kubectl describe查看該coredns的pod,發(fā)現(xiàn)在拉取coredns的鏡像,稍微等待一會。

kubectl describe pod coredns-799bc9dbc6-m7q4t -n kube-system

等待一會后查看events,發(fā)現(xiàn)終于拉取成功了。

查看pod和svc狀態(tài),都是running的。

kubectl get pod,svc -A

九、kubernetes-dashboard的部署

1、獲取yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

2、增加配置,使Dashboard暴露到外部

vim recommended.yaml

因?yàn)槟J(rèn)Dashboard只能集群內(nèi)部訪問,修改Service為NodePort類型,暴露到外部。

3、apply修改后的recommended.yaml

kubectl apply -f recommended.yaml

4、查看kubernetes-dashboard的pod狀態(tài),都已經(jīng)是running的

kubectl get pods -n kubernetes-dashboard

5、訪問網(wǎng)址

https://NodeIP:30001。

我的主節(jié)點(diǎn)地址為172.20.10.6,因此訪問https://172.20.10.6:30001。

6、創(chuàng)建service account并綁定默認(rèn)cluster-admin管理員集群角色:

創(chuàng)建用戶:

kubectl create serviceaccount dashboard-admin -n kube-system

用戶授權(quán):

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。

可以查看當(dāng)前k8s的相關(guān)信息,例如nodes,namespace等。

十、使用k8s簡單部署一個(gè)nginx

1、根據(jù)yaml創(chuàng)建namespace

vim nginx-namespace.yaml
內(nèi)容如下
apiVersion: v1 #類型為Namespace
kind: Namespace #類型為Namespace
metadata:
name: ns-test #命名空間名稱
labels:
name: label-test #pod標(biāo)簽

創(chuàng)建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、創(chuàng)建pod

一般不直接create pod,而是通過controller來創(chuàng)建pod。deployment為其中一種controller

拉取nginx鏡像:

docker pull nginx

編輯pod的yaml文件:

vim nginx-deployment.yaml

內(nèi)容如下:

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

創(chuàng)建:

kubectl create -f nginx-deployment.yaml

查詢:

kubectl get pods -n ns-test
kubectl get deployment -n ns-test

nginx-deployment 部署的2個(gè) pod 全部成功。

查看兩個(gè)nginx分配的ip。

kubectl get pods -o wide -n ns-test

訪問測試:

curl http://10.0.181.5

3、創(chuàng)建service

創(chuàng)建對應(yīng)yaml文件:

vim nginx-service.yaml

內(nèi)容如下:

apiVersion: v1
kind: Service
metadata:
namespace: ns-test
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80

創(chuàng)建service:

kubectl create -f nginx-service.yaml

查看service:

kubectl get svc nginx-service -o wide  -n ns-tes

訪問測試:

4、暴露端口部署nginx服務(wù)

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已經(jīng)指定了
nodePort: 31090 #外網(wǎng)訪問的端口
selector:
app: nginx
type: NodePort

部署服務(wù)。

kubectl create -f nginx-service.yaml

查看服務(wù)和端口。

kubectl get svc nginx-service -n ns-test

網(wǎng)頁題目:Kubeadm部署一主兩從的Kubernetes集群
分享鏈接:http://www.dlmjj.cn/article/djchshp.html