从0开始的Ubuntu1804 构建K8s技术方案(基于树莓派4B)

1、树莓派 4B的系统安装

用指定软件格式化内存卡,注意格式化时要命名为“boot”树莓派才识别

用指定软件将纯净的ubuntu18.04镜像烧录进内存

将内存卡插入树莓派后通电,等待系统自动安装

注意:初始密码和初始用户都是ubuntu,之后会强制要求改密码

2、主从节点的网络配置

//建立root用户(root用户权限高,开发更加方便,不过要注意不要误删重要的系统文件)
sudo passwd root
// 关闭防火墙:
ufw disable
// 关闭交换空间:
swapoff -a
// 设置主机名(失败可采用法二)
hostnamectl set-hostname k8s-master
//设置主机名法二
vim  /etc/hostname
修改:把旧主机名修改为新主机名
vim  /etc/hosts
修改:把旧主机名修改为新主机名
reboot
// 设置内核路由转发
vim /etc/sysctl.conf
去注释:net.ipv4.ip_forward = 1  #开启ipv4转发,允许内置路由
// 使设置生效
sysctl -p 
// 设置hosts地址解析(该步骤可以集群搭建完成后再进行)
vim /etc/hosts
192.168.253.8 k8s-master
192.168.253.11 k8s-node01
192.168.253.12 k8s-node02
192.168.253.21 k8s-Edge01
192.168.253.22 k8s-Edge02
// 设置时区(亚洲,中国,北京)区域对应的数字有可能发生变化,请自行选择数字
tzselect
依次输入:
4 - 10 - 1 - 1
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
// 换源(该步骤可以在树莓派连接上xshell之后再进行,因为纯手动输入这些网址确实挺麻烦,连接上之后可以复制粘贴)
cp /etc/apt/sources.list /etc/apt/sources.list.backup // 官方源备份
vim /etc/apt/sources.list                             // 插入中科大源
/*------------------------------- 适用于 Ubuntu 1804 ---------------------------------------*/
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security multiverse


//又或换成以下的清华源(某些软件可能中科大源里没有,比如k8s安装部分)
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse

// 更新
apt update && apt upgrade
// 开启树莓派WiFi
ifconfig wlan0 up
// 配置树莓派使用WiFi下的静态IP:
// 修改文件(配置文件格式要求比较严格,注意冒号之后的空格与缩进!每次缩进是四个空格!)
vim /etc/netplan/50-cloud-init.yaml
network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    wifis:
        wlan0:
            access-points:
                "WiFi名":
                     password: "密码"
            dhcp4: false
            dhcp6: no
            addresses: [192.168.253.12/24]//前三段与路由器的ip保持一致,12可自己配置,24不变
            gateway4: 192.168.253.1//前三段与路由器的ip保持一致,1不变
            nameservers:
                addresses: [192.168.253.1, 223.5.5.5]//一地址前三段与路由的ip相同,其余不改动
    version: 2
//使配置文件生效,如果报错,返回配置文件进行检查
netplan try
//netplan generate
//netplan apply
//启用 net.bridge.bridge-nf-call-iptables 和 -iptables6
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
//查看ip地址(如果配置成功会在wlan0处看到已经设置好的静态ip,此时第一阶段的准备工作完成)
ifconfig

2、用Xshell连接到树莓派

//下载openssh-server(若报错,可直接删除报错中提到的文件夹,然后apt-get update后再执行)
//下载完成后便可以进行普通用户的远程登录
sudo apt-get install openssh-server
//打开远程可登录root用户的权限
vim /etc/ssh/sshd_config
将“#PermitRootLogin prohibit-password”修改为“PermitRootLogin yes”
//重启服务
service sshd restart

3、docker的安装

为保证k8s与项目框架的契合,选择使用k8s v1.15.12 版本,该版本官方最高支持到docker 18.09

//多行代码复制粘贴时,建议先复制到windows记事本,调整格式并删除多余的文字再粘贴进Linux系统
(
cat <<EOF
deb [arch=arm64] https://download.docker.com/linux/ubuntu bionic stable
EOF
) > /etc/apt/sources.list.d/docker.list
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt update
apt -y install docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic
apt-mark hold docker-ce-cli
apt -y install docker-ce=5:18.09.9~3-0~ubuntu-bionic // containerd.io 自动安装
apt-mark hold docker-ce containerd.io

docker安装完成后,使用docker info 查看生成信息,着重检查一下几点:

Cgroup Driver: systemd//若不是systemed则继续进行下述操作
Storage Driver: overlay2
    
如下程序可以对上述配置进行设置
//创建或替换 /etc/docker/daemon.json 以启用 cgroup 的 systemd 驱动
sudo cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

// 将 cgroup 和交换选项添加到内核命令行中
// 请注意 "cgroup_enable=cpuset" 前需加一个空格空格,以便在该行的最后一个项目后添加一个空格
vim  /boot/firmware/nobtcmd.txt    //Ubuntu1804 默认添加位置  
添加:cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 swapaccount=1
// 配置完后重启docker
systemctl daemon-reload
systemctl restart docker
// 注意:执行docker info无报错后发可往下执行!

4、k8s的安装

(1)安装k8s相关软件

// 创建kubernetes的repo
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
// 添加密钥
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
// 添加国内下载源,注意受限于版本限制,这里的xenial莫要去更改它!!
sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
// 更新安装包信息
sudo apt-get update
// 查看当前环境下合适的安装版本
apt-cache madison kubelet
// 安装指定版本的K8S(安装失败,换成清华源就可以了)
apt-get install -y kubelet=1.15.12-00 kubeadm=1.15.12-00 kubectl=1.15.12-00
// 为保证项目中其他模块不受影响,此处对K8s版本进行锁定,以避免误操作使其版本发生变化
apt-mark hold kubelet=1.15.12-00 kubeadm=1.15.12-00 kubectl=1.15.12-00
// 设置开机自启动
systemctl enable kubelet && sudo systemctl start kubelet
// 截至目前虽然已安装好软件,当还无法部署,因为国内网络原因需要使用一些技巧拉取一下部署镜像!

(2)拉取开k8s部署镜像

//查询当前环境需要的镜像
kubeadm config images list --kubernetes-version=v1.15.12
/*
系统输出如下:
	k8s.gcr.io/kube-apiserver:v1.15.12
	k8s.gcr.io/kube-controller-manager:v1.15.12
	k8s.gcr.io/kube-scheduler:v1.15.12
	k8s.gcr.io/kube-proxy:v1.15.12
	k8s.gcr.io/pause:3.1
	k8s.gcr.io/etcd:3.3.10
	k8s.gcr.io/coredns:1.3.1
*/
// 由于k8s.gcr.io、quay.io等被墙,相关镜像先再其他仓库下载,然后再重打标签进行使用
镜像下载方法:
可直接在PC上下载,如果PC能FQ当然最好不过了,不过不FQ也能下
官网镜像网址:   https://hub.docker.com/
/* 直接在网页上搜索对应的镜像名,如“kube-apiserver”,由于树莓派属于arm架构所以需要在搜索名后添加补充“kube-apiserver-arm64”然后再去搜索,选择好仓库后在Tag标签中选择合适版本,复制右边的命令到Ubuntu即可下载到本地,下载下来后注意重新打上官方标签:*/
//下面是用上述方法查找好的指令和打标签的指令,可以直接输入
docker pull kubesphere/kube-proxy-arm64:v1.15.12   
docker tag kubesphere/kube-proxy-arm64:v1.15.12 k8s.gcr.io/kube-proxy:v1.15.12

docker pull gcmirrors/kube-apiserver-arm64:v1.15.12  
docker tag gcmirrors/kube-apiserver-arm64:v1.15.12 k8s.gcr.io/kube-apiserver:v1.15.12

docker pull gcmirrors/kube-controller-manager-arm64:v1.15.12
docker tag gcmirrors/kube-controller-manager-arm64:v1.15.12 k8s.gcr.io/kube-controller-manager:v1.15.12

docker pull gcmirrors/kube-scheduler-arm64:v1.15.12
docker tag gcmirrors/kube-scheduler-arm64:v1.15.12 k8s.gcr.io/kube-scheduler:v1.15.12

docker pull mirrorgooglecontainers/pause-arm64:3.1
docker tag mirrorgooglecontainers/pause-arm64:3.1 k8s.gcr.io/pause:3.1

docker pull mirrorgooglecontainers/etcd-arm64:3.3.10
docker tag mirrorgooglecontainers/etcd-arm64:3.3.10 k8s.gcr.io/etcd:3.3.10

docker pull kontenapharos/coredns-arm64:1.3.1
docker tag kontenapharos/coredns-arm64:1.3.1 k8s.gcr.io/coredns:1.3.1

// 本文给大家提供了下载好的镜像文件
链接:https://pan.baidu.com/s/1w46UsDBNXDRgbwOXcR1MSw 提取码:82hq 
// 下载好后,按照txt文档对镜像进行导入(用xshell上方的文件传输功能),并重新打上官方标签
docker load < flanneld-v0.12.0-arm64.docker
// 更多细节可参考这篇博客:
https://www.cnblogs.com/embedded-linux/p/10776221.html

(3)k8s-Master节点部署

// 以上步骤执行完后即可开始进行k8s的部署
先生成一个引导令牌来验证加入集群的节点
TOKEN=$(sudo kubeadm token generate)
echo $TOKEN
// 初始化主节点(若报错,重启再执行一次即可)
sudo kubeadm init --token=${TOKEN} --kubernetes-version=v1.15.12 --pod-network-cidr=10.244.0.0/16
// 创建成功会给出如下提示:
/*
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.253.8:6443 --token yh4w3s.sdbg5np6v3reno5m \
    --discovery-token-ca-cert-hash sha256:3197f454f00883d7e0d1caa180c35ef2b42e20d414c38ac040a5a148598d105d 
*/

初始化成功后,按照文中提示,首先执行以下语句:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config  //若当前用户不是root用户需要执行

上面语句执行完后,现在执行kubectl get nodes,会发现master节点并不是ready状态,原因是还没初始化节点网络,

本文使用kube-flannel.yml文件进行网络初始化,文件可通过该连接下载:

链接:https://pan.baidu.com/s/1tLpGoDNPBlrJR65cJkVNCQ 提取码:xl2k

下载完后用xshell上方文件传输功能将从网盘下载的这两个文件导入ubuntu中
 

// 注意:上面的镜像包已包含kube-flannel.yml文件所需镜像,若上面导入了就可以不用导入了,若上面没导入,可执行下面语句进行镜像导入
docker load < flanneld-v0.12.0-arm64.docker
// 导入后,执行下面语句初始化节点网络
kubectl apply -f kube-flannel.yml
// 初始化成功后,再执行
kubectl get nodes
// 此时,master节点已成ready状态(若不是,请多等几分钟才执行该指令查看)

生成密钥:
kubeadm token create
输出:aa78f6.8b4cafc8ed26c34f

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256
输出:0fd95a9bc67a7bf0ef42da968a0d55d92e52898ec37c971bd77ee501d845b538

截止到此处,k8s的master节点已部署完成。

(4)k8s-node节点部署

      node节点只需要执行下述语句即可加入master集群,下述指令中token后面加的是上面第一个输出,sha256:后面加的是第二个输出

kubeadm join 192.168.253.8:6443 --token yh4w3s.sdbg5np6v3reno5m --discovery-token-ca-cert-hash sha256:3197f454f00883d7e0d1caa180c35ef2b42e20d414c38ac040a5a148598d105d 

 注:若出现以下这种卡住在这里的报错,应该是由于主从节点时间不同步导致的

[root@k8s-node1 log]# kubeadm join 10.0.0.200:6443 --token dmsehb.dvofkx1z5dpc0r58 --discovery-token-ca-cert-hash sha256:f8d6e3c1562adcd5e35d6246679c23759124229bf36e100cbf03398849263911
[preflight] Running pre-flight checks

          解决方法(主从节点都要进行如下操作):

[root@k8s-master1 kubeadm]# date
Sun Mar 20 04:05:57 CST 2022
[root@k8s-node1 log]# date
Mon Mar 21 17:35:48 CST 2022
#同步时间
[root@k8s-master1 kubeadm]# apt-get install ntpdate
[root@k8s-master1 kubeadm]# ntpdate ntp1.aliyun.com;hwclock --systohc
#然后再重新生成两段密钥,让从节点重新加入

 若成功加入,从节点显示如下

若成功加入,主节点执行kubectl get nodes后显示如下

至此,集群的搭建已经全部完成!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值