k8s学习九:非内网搭建k8s

简介: k8s学习九:非内网搭建k8s

文章背景

很多人知道,我在自己家里搭建了一台服务器,可以直接访问外网,另外我老家还有2台服务器,也有外网,所以想着集合下阿里云,老家的服务器资源,搭建k8s环境

image.png

家里服务器带宽高,但是ip会经常变动,所以需要考虑到ip变动的问题

我打算深圳的服务器作为master节点,进行搭建k8s网络集群

外网搭建配置

由于centos停止维护了,所以我的服务器都是ubuntu 22系统,搭建的k8s版本为1.23.10

配置虚拟网卡

因为我们的服务器都是外网访问的,网卡没有绑定外网ip,所以需要创建虚拟网卡去绑定外网ip

#首先需要获取到自己的网卡名
root@tioncico-pc:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid\_lft forever preferred\_lft forever
    inet6 ::1/128 scope host 
       valid\_lft forever preferred\_lft forever
2: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:23:81:22:db:95 brd ff:ff:ff:ff:ff:ff
    inet 119.123.101.117/8 brd 119.255.255.255 scope global enp2s0:1
       valid\_lft forever preferred\_lft forever
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 34:de:1a:98:33:89 brd ff:ff:ff:ff:ff:ff
    inet 192.168.68.152/24 metric 600 brd 192.168.68.255 scope global dynamic wlp3s0
       valid\_lft 10361092sec preferred\_lft 10361092sec
    inet6 fd05:a5df:b270:0:36de:1aff:fe98:3389/64 scope global mngtmpaddr noprefixroute 
       valid\_lft forever preferred\_lft forever
    inet6 fe80::36de:1aff:fe98:3389/64 scope link 
       valid\_lft forever preferred\_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:70:50:46:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid\_lft forever preferred\_lft forever
5: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether 5a:8c:ee:0b:13:45 brd ff:ff:ff:ff:ff:ff
    inet 10.244.0.0/32 scope global flannel.1
       valid\_lft forever preferred\_lft forever
    inet6 fe80::588c:eeff:fe0b:1345/64 scope link 
       valid\_lft forever preferred\_lft forever
6: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
    link/ether 1e:14:f7:cf:b6:e6 brd ff:ff:ff:ff:ff:ff
    inet 10.244.0.1/24 brd 10.244.0.255 scope global cni0
       valid\_lft forever preferred\_lft forever
    inet6 fe80::1c14:f7ff:fecf:b6e6/64 scope link 
       valid\_lft forever preferred\_lft forever
7: veth4273b252@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default 
    link/ether 2a:34:bc:1c:7e:a9 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::866:8dff:fe95:e61f/64 scope link 
       valid\_lft forever preferred\_lft forever
8: veth34975173@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default 
    link/ether 4e:4c:cb:ee:b6:55 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::fcad:ccff:fe0a:6613/64 scope link 
       valid\_lft forever preferred\_lft forever
root@tioncico-pc:~# 
### 根据网卡名,去创建一张虚拟网卡: 我这边用的是enp2s0
root@tioncico-pc:~#  ifconfig enp2s0:1 119.123.101.118(外网ip)
root@tioncico-pc:~#

初始化k8s master 集群

该步骤和文章: https://www.php20.cn/article/387  一致,ip改为外网ip

kubeadm init \
 --apiserver-advertise-address 119.123.101.117 \
 --apiserver-bind-port 6443 \
 --pod-network-cidr 10.244.0.0/16 \
 --image-repository registry.aliyuncs.com/google_containers -v10

等待集群初始化完毕

阿里云节点加入集群

该步骤和文章:           一致

kubeadm join 119.123.101.117:6443 \
--token co521f.29i90vgeen5feer6         \
--discovery-token-ca-cert-hash sha256:881055871d680663e95215e7c34dc16958ea475a0f1789c1eca5a460e4268366  \
-v10

加入成功后,在master节点可以获取到节点状态:

root@tioncico-pc:~# kubectl get nodes
NAME                      STATUS   ROLES                  AGE   VERSION
izwz92md6qnm0l3rvvrn8nz   Ready    <none>                 36m   v1.23.10
tioncico-pc               Ready    control-plane,master   44m   v1.23.10
root@tioncico-pc:~#

如果有错误,依次解决错误就可以了

可能存在的错误以及解决方案

节点显示not ready


通过  kubectl describe nodes 命令查看节点详情

kubectl describe nodes  节点名

如果详情没发现节点报错,那说明节点连接正常

在not ready子节点上执行查看报错

systemctl status kubelet

子节点 open /run/flannel/subnet.env: no such file or directory

查看master 节点的配置文件

root@tioncico-pc:~# cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
root@tioncico-pc:~#

将master的复制到子节点,并重启kubelet

创建nginx服务测试:

kubectl create deployment nginx  --image=nginx:1.14-alpine

如果报错,可通过命令排查错误:

root@tioncico-pc:~# kubectl describe pod nginx

没报错的情况:

root@tioncico-pc:~# kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7cbb8cd5d8-d7jwc   1/1     Running   0          20m
root@tioncico-pc:~#

下一章节将说明如果master节点更改之后如何重置集群

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 Kubernetes 持续交付
k8s学习
【10月更文挑战第1天】
89 4
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
2月前
|
Kubernetes 监控 测试技术
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
113 2
k8s学习--基于Ingress-nginx实现灰度发布系统
|
2月前
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
113 1
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
2月前
|
存储 Kubernetes 调度
|
2月前
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
170 1
|
2月前
|
Kubernetes JavaScript 前端开发
k8s学习--chart包开发(创建chart包)
k8s学习--chart包开发(创建chart包)
104 1
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--Traffic Shifting 流量接入
k8s学习--Traffic Shifting 流量接入
|
2月前
|
Kubernetes 监控 数据可视化
k8s学习--使用argo-rollouts实现金丝雀发布
k8s学习--使用argo-rollouts实现金丝雀发布
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例