【Windows+虚拟机】Kubeadm方式搭建单master的k8s集群

田田田

一、准备工作

1、准备三台虚拟机,系统为CentOS7.x,一台用作master节点,另外两台作为node节点

  • 虚拟机硬件配置
    • 2GB或更多RAM
    • 2个或更多CPU
    • 硬盘30G或更多
  • 三台虚拟机之间可以互通
  • 虚拟机可以访问外网
  • 禁止三台虚拟机的swap分区

2、三台虚拟机网络设置办法(供参考)

  • 桥接模式(选择对应的网卡)
  • 更改/etc/sysconfig/network-scripts/ifcfg-ens33文件的ONBOOT为yes
  • 重启网络服务service network restart

3、关闭三台虚拟机的防火墙

# 临时关闭
$ systemctl stop firewalld
# 永久关闭
$ systemctl disable firewalld

4、关闭三台虚拟机的selinux

# 永久关闭
$ sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时关闭
$ setenforce 0

5、关闭三台虚拟机的swap

$ swapoff -a 
$ sed -ri 's/.*swap.*/#&/' /etc/fstab

6、根据规划设置三台虚拟机的主机名

$ hostnamectl set-hostname <hostname>

例如

image-20210330140111829.png

可以用hostname命令来查看设置的主机名

7、在 master 添加 hosts(只在master主机上执行)

$ cat >> /etc/hosts << EOF
192.168.30.242 master
192.168.30.176 node01
192.168.30.149 node02
EOF

例如

image-20210330140432183.png

8、在三台虚拟机上将桥接的 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 

例如

image-20210330140659006.png

9、设置三台虚拟机的时间和Windows时间同步

$ yum install ntpdate -y
$ ntpdate time.windows.com

二、安装Docker、kubeadm、kubelet

2.1. 安装Docker

Kubernetes 默认 CRI( 容器运行时) 为 Docker, 因此先安装 Docker。

三台虚拟机都要安装。

$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 安装docker
$ yum -y install docker-ce-18.06.1.ce-3.el7
# 启动docker 并添加开机启动
$ systemctl enable docker && systemctl start docker
# 查看安装的docker版本,返回版本即安装成功
$ docker --version

如果虚拟机没有wget命令,使用yum install wget安装wget命令。

2.2. 添加阿里云 YUM 软件源

三台虚拟机都要添加

# 设置仓库地址
$ cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
} 
EOF

# 重启docker
$ systemctl restart docker

# 添加 yum 源
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
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

可以使用docker info命令来查看仓库地址是否修改成功

image-20210330142425313.png

2.3. 安装 kubeadm, kubelet 和 kubectl

# 不指定版本,则安装最新的
$ yum install -y kubelet kubeadm kubectl
# 设置开机启动
$ systemctl enable kubelet

三、部署 Kubernetes Master

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问, 这里指定阿里云镜像仓库地址。

在Master主机上执行(只在master主机上执行

$ kubeadm init \
--apiserver-advertise-address=0.0.0.0 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

命令参数说明(为了更好的理解命令)

# 初始化 Control-plane/Master 节点
kubeadm init \
    --apiserver-advertise-address 0.0.0.0 \
    # API 服务器所公布的其正在监听的 IP 地址,指定“0.0.0.0”以使用默认网络接口的地址
    # 切记只可以是内网IP,不能是外网IP,如果有多网卡,可以使用此选项指定某个网卡
    --apiserver-bind-port 6443 \
    # API 服务器绑定的端口,默认 6443
    --cert-dir /etc/kubernetes/pki \
    # 保存和存储证书的路径,默认值:"/etc/kubernetes/pki"
    --control-plane-endpoint kuber4s.api \
    # 为控制平面指定一个稳定的 IP 地址或 DNS 名称,
    # 这里指定的 kuber4s.api 已经在 /etc/hosts 配置解析为本机IP
    --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
    # 选择用于拉取Control-plane的镜像的容器仓库,默认值:"k8s.gcr.io"
    # 因 Google被墙,这里选择国内仓库
    --kubernetes-version 1.20.4 \
    # 为Control-plane选择一个特定的 Kubernetes 版本, 默认值:"stable-1"
    --node-name master01 \
    #  指定节点的名称,不指定的话为主机hostname,默认可以不指定
    --pod-network-cidr 10.10.0.0/16 \
    # 指定pod的IP地址范围
    --service-cidr 10.20.0.0/16 \
    # 指定Service的VIP地址范围
    --service-dns-domain cluster.local \
    # 为Service另外指定域名,默认"cluster.local"
    --upload-certs
    # 将 Control-plane 证书上传到 kubeadm-certs Secret

安装成功

显示successfully即是安装成功,提示信息里还给出了接下来要执行的命令,可以在执行这些命令前,通过docker images 命令查看init过程拉取了哪些镜像

当前图片只是指出接下来要执行的命令的提示位置,先不用执行图片中标明的命令


image-20210330152252093.png

docker images查看拉取的镜像

image-20210330143753009.png

接下来要执行的命令,在命令行有提示

image-20210330143935363.png

命令如下
只在master节点上执行

$ 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

再在两个node虚拟机上执行这一行命令

image-20210330151054468.png
kubeadm join 192.168.30.242:6443 --token jwmvm2.2re7i8qn2babk33r \
    --discovery-token-ca-cert-hash sha256:0666829988b6b99665c397983e8d03833d98bc3a4dce4891457459ee9b6e97a7

执行结果

image-20210330152314451.png

在master上查看node

$ kubectl get nodes

node节点已经加入了,但是当前状态是NotReady的

image-20210330152346099.png

四、部署CNI网络插件

在master主机上执行
方式1:

# 源是国外源,可以寻找国内源或多重试几次
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

$ kubectl get pods -n kube-system

方式2:把yaml文件拉到本地,再 kubectl apply -f 文件

image-20210330154133997.png

执行后再次查看各node状态

$ kubectl get nodes

结果


image-20210330154253079.png

五、测试

在 Kubernetes 集群中创建一个 pod, 验证是否正常运行(在master主机执行)

# 创建pod
$ kubectl create deployment nginx --image=nginx
# 对外暴露端口
$ kubectl expose deployment nginx --port=80 --type=NodePort
# 列出当前命名空间下的所有pod,services
$ kubectl get pod,svc
# 扩展
$ kubectl scale deployment nginx --replicas=2

运行结果

image-20210330154945864.png

这时候使用浏览器访问任意两台node虚拟机的ip+nginx的开放端口31975,都可以访问到nginx。


image-20210330155818943.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容