前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务 - 搭建k8s(kubeadm)模拟复杂的生产环境(下篇)

微服务 - 搭建k8s(kubeadm)模拟复杂的生产环境(下篇)

原创
作者头像
stark张宇
发布2023-03-06 13:29:39
6020
发布2023-03-06 13:29:39
举报
文章被收录于专栏:stark张宇

概述

在之前的k8s实践中,我们使用minikube搭建了k8s环境,为了更真实的展示生产级别的k8s,本节课采用kubeadm来搭建master+worker集群,实现k8s集群,master、worker在虚拟机上来执行,中间遇到了超级多的坑,在这里系统的总结一下,分上下两篇进行讲解。

一共有3台虚拟服务器主机,上篇主要介绍,kubeadm安装前的准备,kubeadm安装,下篇主要介绍使用Flannel 把Master、worker节点链接在k8s的同一个网络中,安装k8s的模拟环境是一切实践k8s的基础条件。

代码语言:txt
复制
master IP: 192.168.88.134
worker IP: 192.168.88.139
console IP: 192.168.88.136

安装 Master 节点

pod-network-cidr 可以给定默认的10.244.0.0,这样安装flannel网络插件的时候就会方便了。 image-repository registry.aliyuncs.com/google_containers 这句是自动安装kubernetes需要的指定的docker镜像。

代码语言:txt
复制
sudo kubeadm init \
    --pod-network-cidr=10.244.0.0/16 \
    --apiserver-advertise-address=192.168.88.134 \
    --kubernetes-version=v1.23.3
代码语言:txt
复制
kubeadm version
kubectl version --client

或者你可以先执行一下下载镜像的脚本:

代码语言:txt
复制
#!/bin/bash

# stark @ 2022-04

# kubeadm config images list --kubernetes-version v1.23.3
# k8s.gcr.io/kube-apiserver:v1.23.3
# k8s.gcr.io/kube-controller-manager:v1.23.3
# k8s.gcr.io/kube-scheduler:v1.23.3
# k8s.gcr.io/kube-proxy:v1.23.3
# k8s.gcr.io/pause:3.6
# k8s.gcr.io/etcd:3.5.1-0
# k8s.gcr.io/coredns/coredns:v1.8.6

# use ali registry to speed up
repo=registry.aliyuncs.com/google_containers

for name in `kubeadm config images list --kubernetes-version v1.23.3`;
do
    # remove prefix
    src_name=${name#k8s.gcr.io/}
    src_name=${src_name#coredns/}

    docker pull $repo/$src_name

    # rename to fit k8s
    docker tag $repo/$src_name $name
    docker rmi $repo/$src_name
done

# flannel images
for name in `grep image flannel.yml |grep -v '#image' | sed 's/image://g' -`;
do
    docker pull $name
done

# check
docker images

如果初始化失败,可以使用 sudo kubeadm reset -f 进行重置:

安装完成以后这个才是最最最重要的地方!!!!

我解释一下提示的意思,这个地方在加入worker节点的时候也是重点需要理解的地方,非root用户执行下面的命令。

代码语言:txt
复制
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

root用户添加全局变量:

代码语言:txt
复制
export KUBECONFIG=/etc/kubernetes/admin.conf

有的时候就会遇见 The connection to the server localhost:8080 was refused - did you specify the right host or port? 这个傻逼问题,这个可能是初始化准备的时候有问题,就得重试!用 sudo kubeadm reset进行重试,如果你没有遇到,恭喜你那你是幸福的!

这个问题我回头会专门回答这个问题,已经知道原因了,我们先安装。

代码语言:txt
复制
sudo rm $HOME/.kube
sudo rm -rf /etc/cni/net.d
sudo ipvsadm --clear

安装 Flannel 网络插件

git 网址 https://github.com/flannel-io/flannel/,底下有提示:

代码语言:txt
复制
# For Kubernetes v1.17+
# If you use custom podCIDR (not 10.244.0.0/16) you first need to download the above manifest and modify the network to match your one.
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml

到此,master节点已经安装好了

代码语言:txt
复制
stark@master:~$ kubectl get node
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   35m   v1.23.3

安装 Worker 节点

Worker 节点的准备工作和Master的一样,可以把Worker上准备好的sh脚本,在worker的服务器上在执行一遍:

把在master上kubeadm初始化成功的 kubeadm join 找到,在worker上执行,这个意思是加入到master的k8s集群中,如果找不到了,就执行kubeadm token create --print-join-command

代码语言:txt
复制
 kubeadm join 192.168.88.134:6443 --token k0yau8.mimrb35spiho0whw \
	--discovery-token-ca-cert-hash sha256:a26bf3d3da3cd4b09fc35cc29bf2170ea8fe43f99f7c2c18ad4634f011bb2c61
代码语言:txt
复制
scp -r stark@192.168.88.134:~/sh ~

复制k8s文件,执行之前的命令:

代码语言:txt
复制
sudo scp -r stark@192.168.88.134:/etc/kubernetes/admin.conf /etc/kubernetes/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

执行kubectl get nodes 命令,worker节点安装完毕:

代码语言:txt
复制
worker@worker:~$ kubectl get nodes
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   67m     v1.23.3
worker   Ready    <none>                 4m41s   v1.23.3

添加一个pod,测试,已经ok了。

代码语言:txt
复制
kubectl run ngx --image=nginx:alpine
kubectl get pod -o wide

worker@worker:~$ kubectl get pod -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
ngx    1/1     Running   0          49s   10.244.1.2   worker   <none>           <none>

Console

Console就非常简单了,把文件直接从Master主机上scp过来就好了。做一个补充,先下载kubectl的文件:

代码语言:txt
复制
#下载:
curl -LO https://dl.k8s.io/release/v1.23.3/bin/linux/arm64/kubectl

# 安装
sudo install kubectl /usr/local/bin/kubectl

# 从master节点复制文件

sudo scp stark@192.168.88.134:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf

执行一下刚才执行的:

代码语言:txt
复制
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

至此,kubeadm的,master + worker + console 的环境搭建完成了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 安装 Master 节点
      • 安装 Flannel 网络插件
        • 安装 Worker 节点
          • Console
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档