k8s的ubunutu部署(虚拟机和服务器同时使用)

由于还是学生没有这么多钱买服务器,所以只能混着用啦。
如果全部用的是虚拟机的话正常部署就行,本文主要是解决如何把k8s部署在服务器的公网ip上,让虚拟机的node节点能添加进来(虚拟机没有公网ip,一般只有内网的ip)

环境

两台ubuntu18.04的虚拟机,一台Ubuntu18.04的服务器

由于虚拟机会使用dhcp,导致IP地址会不断变化,因此需要设置静态ip

下面一系列操作最好使用root来操作

准备工作
设置静态ip

先使用这个命令来查看当前网络的网关,记着当前的网关

route -n

然后去设置静态路由

vim /etc/netplan/01-network-manager-all.yaml

进入后按照下面模板来修改

network:
        ethernets:
            ens33:
                    addresses: [xxx.xxx.xxx.xxx/24]  #设置固定ip
                    gateway4: xxx.xxx.xxx.xxx #此处为上面查看到的网关
                    dhcp4: no     #关闭动态分配ip
                    optional: true
                    nameservers:
                            addresses: [8.8.8.8,8.8.4.4]
        version: 2
        renderer: NetworkManager

最后通过命令

netplan apply

使上面的修改生效

其它准备工作

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭selinux(先执行setenceforce 0,若第一次执行失败,按照提示下载对应的deb再执行即可)

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

上面的永久命令里可能selinux里面的不一定使config,根据个人情况修改

关闭swap

swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

将桥接的IPv4流量传递到iptables的链

vim /etc/sysctl.d/k8s.conf

在文件里面输入

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

保存退出后执行

sysctl --system  # 生效
开始搭建
配置host

执行命令

vim /etc/hosts

输入

作为master的服务器的ip   k8smaster  
作为第一个node节点的ip   k8snode1
作为第二个node节点的ip   k8snode2
设置主机名
hostnamectl set-hostname <hostname>
安装基础组件

下载docker

apt-get update
apt-get install docker.io

下载完成后输入

docker --version

若显示版本号则证明下载成功

配置安装源地址

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
vim /etc/apt/sources.list.d/kubernetes.list

在文件里输入

deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

然后执行

apt-get update

安装kubeadm,kubelet和kubectl

master和node均要

这里特别注意版本的对应关系,我这里安装的都是1.18.0,一开始我安装的是1.23.6,在kubeadm init的时候出现的

[kubelet-check] Initial timeout of 40s passed.

无法解决,每个版本有不同的解决办法

注意版本不能低于1.13.0,但也不能高于1.24.0,好像是1.24.0后kubernetes不支持docker了

可以使用命令

apt-cache madison package

查看要安装的包的版本

apt-get install -y kubelet=1.18.0-00 kubeadm=1.18.0-00 kubectl=1.18.0-00

然后输入以下命令,不然在初始化时有可能会报错

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

重启docker

systemctl daemon-reload
systemctl restart docker
master初始化
kubeadm init \
  --apiserver-advertise-address=you master ip \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

该命令如果是按照本文的版本号进行操作,会出现以下错误,(其它版本可参考)

在这里插入图片描述

在输入上述命令后,kubeadm即开始了master节点的初始化,但是由于etcd配置文件不正确,所以etcd无法启动,要对etcd.yaml文件进行修改。

这里需要注意 etcd.yaml文件是在kubeadm init命令执行才会出现的,所以需要你再打开另一个master的ssh窗口,一个窗口在执行kubeadm init,立马切到另外一个窗口,找到etcd.yaml文件,命令:

vim /etc/kubernetes/manifests/etcd.yaml

此处"43.143.65.53"为master公网ip,要关注的是"–listen-client-urls"和"–listen-peer-urls"。需要把–listen-client-urls后面的公网IP删除,把–listen-peer-urls改成127.0.0.1:2380
在这里插入图片描述

出现如下结果则说明初始化成功

在这里插入图片描述

此时执行下列命令来创建集群

# 若此时已经是root下执行的就不需要加sudo
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节点执行刚刚初始化成功最后显示的那一串命令,即kubeadm join …,如果忘了可以在master中执行以下命令来查看

kubeadm token create --print-join-command
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值