首页 > 其他分享 >【亲手实践】本地multipass安装kubernetes,再也不怕环境被铲

【亲手实践】本地multipass安装kubernetes,再也不怕环境被铲

时间:2024-12-29 21:41:41浏览次数:1  
标签:kubernetes -- sudo apt multipass docker kubeadm 亲手

一、安装multipass

 1. 安装multipaas软件版本 brew install multipass

 2. 创建三个虚拟机master(192.168.64.6)、node1(192.168.64.14)、node2(192.168.64.15),2G cpu+2G内存+40G硬盘,Qemu+桥连模式

     $ multipass find 查找可用ubuntu版本,这里选择22.04这个版本

     $ multipass launch -n master -c 2 -m 2G -d 50G  --network bridged 22.04

     $ multipass launch -n node1 -c 2 -m 2G -d 50G  --network bridged 22.04

     $ multipass launch -n node2 -c 2 -m 2G -d 50G  --network bridged 22.04

 3. 设置网络

     $ multipass networks 查找可连接网络

     $ multipass set local.bridged-network=en0

     $ multipass set local.master.bridged=true

     $ multipass set local.node1.bridged=true

     $ multipass set local.node2.bridged=true

4. 每个实例设置mount,以master举例

     $ multipass shell master

     >ubuntu@master: sudo snap install multipass-sshfs

     $ sudo snap install multipass-sshfs

     $ multipass mount /Users/xxx/Documents/work/k8sdev/mutipaas/k8s-node1 node1:/root

-------------以下操作进入每个实例执行---------------------

二、安装kubernetes

0. 加hosts,sudo vi /etc/hosts

             192.168.64.6 master

             192.168.64.14 node1

             192.168.64.15 node2

1. 关闭swap空间 swapoff -a, 通过free -h 查看swap是否关闭。

  避免开机启动交换空间,  $ vi /etc/fstab 注释掉swap开头的行

2. 关闭防火墙 sudo ufw disable (sudo -s 切换到root)

3. 设置时区,dpkg-reconfigure tzdata,Asia/shanghai

   安装 ntpdate,apt-get update && apt-get install ntpdate

   设置系统时间与网格同步,ntpdate edu.ntp.org.cn

                                    apt install util-linux-extra

                                    将系统时间写入硬件时间 $ hwclock --systohc

4. 安装docker

https://cloud.tencent.com/developer/article/2076354

保证老版本docker卸载了,sudo apt-get remove docker docker-engine docker.io containerd runc

安装docker依赖, sudo apt-get install ca-certificates curl gnupg lsb-release

添加Docker官方GPG密钥, curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

添加Docker软件源,#sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

                           sudo add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu xenial stable"

查看可安装的Dokcer版本,apt-cache madison docker-ce

安装docker,[最新版本] apt-get install docker-ce docker-ce-cli containerd.io

                   [安装1.19.03版本] apt-get install docker-ce=5:19.03.15~3-0~ubuntu-xenial docker-ce-cli=5:19.03.15~3-0~ubuntu-xenial containerd.io

                   需要注意,docker版本要跟k8s版本对应 

安装工具,apt-get -y install apt-transport-https ca-certificates curl software-properties-common

运行docker,systemctl start docker

验证是否成功,sudo docker run hello-world

如果显示 cgroup mountpoint does not exist: unknown错误,执行如下脚本(cgroup文件特别容易出问题):

               #$ mkdir /sys/fs/cgroup/systemd 

               $ mkdir /root/cgroup/systemd

               $ mount -t cgroup -o none,name=systemd cgroup /root/cgroup/systemd/

设置为开机自启动,/usr/lib/systemd/systemd-sysv-install enable docker

 5. 安装k8s工具 kubeadm kubectl kubelete

#确认已安装系统工具,apt-get update && apt-get install -y apt-transport-https

安装CPG证书,curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

写入软件源,vi /etc/apt/sources.list.d/kubernetes.list 加入:deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

安装,[安装最新版本] apt-get update && apt-get install -y kubeadm kubelet kubectl

         [安装指定版本]  apt-get update && apt-get install -y kubelet=1.19.9-00 kubeadm=1.19.9-00 kubectl=1.19.9-00   (具体版本可以查https://mirrors.aliyun.com/kubernetes/apt/)

         [卸载] apt-get remove  -y kubelet kubeadm kubectl

修改cloud.cfg,vi /etc/cloud/cloud.cfg,

                      # 修改成 true

                      preserve_hostname: true

6. 安装kubernetes

1) 执行脚本如下: /root/kubernetes/cluster

$ cd /root

$ mkdir kubernetes

$ cd kubernetes

$ mkdir cluster

$ cd cluster

$ kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml 

(有个WARNNING提示,忽略)

$ vi kubeadm.yml,修改如下地方:

 修改主机ip     advertiseAddress: 192.168.64.6

修改镜像地址(k8s.gcr.io 为Google镜像地址)     imageRepository:registry.aliyuncs.com/google_containers

注意: kubernetesVersion 版本

networking:

    serviceSubnet:10.96.0.0/12

    podSubnet: 10.224.0.0/24


2) 查看需要下载哪些镜像, kubeadm config images list --config kubeadm.yml

拉取镜像, kubeadm config images pull --config kubeadm.yml (忽略WARNNING报错)

查看镜像,docker images

3) 安装主节点(node节点不走此步骤):

                  kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log

                  如果执行失败,journalctl -xeu kubelet | grep error 查看kubelete启动失败原因, 或者 systemctl status kubelet 查看kubelete状态。

                  如果显示 cgroup mountpoint does not exist: unknown错误,执行如下脚本:                  

                              #$ mkdir /sys/fs/cgroup/systemd 

                              $ mkdir /root/cgroup/systemd

                              $ mount -t cgroup -o none,name=systemd cgroup /root/cgroup/systemd/

                  如果执行失败后,重新执行,会显示prelight error, port in use,这个时候,kubeadm reset --force 后,再次执行 kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log

                  /etc/docker/daemon.json,将dockercgroup驱动程序设置为systemd,此时daemon.json如下:

                                 { "registry-mirrors": ["https://c8lfvm3n.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] }

                  重新加载daemon.json,重启docker和kubelet:

                                 $ sudo systemctl daemon-reload

                                 $ sudo systemctl restart docker

                                 $ sudo systemctl restart kubelet

                  kubeadm init失败了很多次,主要是卡在kubelet启动,来回systemctl status kubelet 查看报错,逐个解决后,kubeadm reset --force 之后再kubeadm init --config=kubeadm.yaml --uploadcerts.

                 一定要注意,kubeadm reset之后,需要执行手动清理脚本:

                                 $ apt install ipvsadm iptables

                                 $ ipvsadm --clear

                                 $ rm -rf  /etc/cni/net.d

                                 # $ iptables -X

                                 $ rm -f $HOME/.kube/config

                 kubeadm init 成功标志如下:

                 

                准备kubeconfig,执行如下脚本:

                                 $ mkdir -p $HOME/.kube

                                 $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

                                 $ sudo chown $(id -u):$(id -g) $HOME/.kube/config

                                 $ export KUBECONFIG=/etc/kubernetes/admin.conf           

                                  

                 设置为开机自启动,systemctl enable kubelet && systemctl start kubelet

                 安装flannl:

                            $ sysctl net.bridge.bridge-nf-call-iptables=1

                            $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

                            $ kubeadm config view | grep podSubnet 查询--pod-network-cidr, 或者kubectl cluster-info dump | grep -m 1 cluster-cidr

                            $ vi kube-flannel.yml, 修改

                                         net-conf.json: |

                                          {

                                               "Network": "10.244.0.0/24”,

                                               "EnableNFTables": false,

                                                "Backend": {

                                                "Type": "vxlan"

                                            }

                                          }

                               $ kubectl create -f kube-flannel.yml 

 4) 安装node节点

                  /etc/docker/daemon.json,将dockercgroup驱动程序设置为systemd,此时daemon.json如下:

                                 { "registry-mirrors": ["https://c8lfvm3n.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] }

                  重新加载daemon.json,重启docker和kubelet:

                                 $ sudo systemctl daemon-reload

                                 $ sudo systemctl restart docker

                                 $ sudo systemctl restart kubelet

                 加入k8s集群,

kubeadm join 192.168.64.6:6443 --token abcdef.0123456789abcdef \

    --discovery-token-ca-cert-hash sha256:8fadf05a2dcf92a5e042ce0714788e486b82ab14d5fe64e46d80948fae352b3d 

             到master节点修改node1的podCird,kubectl patch node node1 -p '{"spec":{"podCIDR":"10.224.0.0/24"}}'

                 设置为开机自启动,systemctl enable kubelet && systemctl start kubelet

 

 

 

 

 

 

 

 

 

 

 

标签:kubernetes,--,sudo,apt,multipass,docker,kubeadm,亲手
From: https://www.cnblogs.com/yennie/p/18613212

相关文章

  • Kubernetes(v1.29)学习笔记
    什么是KubernetesK8s是Kubernetes的简称,是一个开源的容器编排系统,用于自动部署、扩展和管理容器化应用程序。Kubernetes源于希腊语,意为“舵手”或“飞行员”,其主要功能包括服务发现与负载均衡、存储编排、Secret和配置管理、批量执行、水平扩缩、自动化上线和回滚、自动装箱......
  • kubernetes之旅
    k8s架构https://kubernetes.io/ 核心组件ETCD分布式高性能键值数据库,存储整个集群的所有元数据Apiserver集群的资源访问控制入口,提供restAPI和安全访问控制scheduler:调度器,负责将业务pod调度到合适的节点上controllermanager:控制器,确保集群按照期望方式运行k......
  • Kubernetes快速部署(v1.31.4)
    文章目录1、初始化2、安装kubeadm3、单节点初始化4、集群网络环境搭建5、安装和配置calicoctl6、集群工作节点添加7、补充1、初始化将系统升级到最新,可以使用阿里源镜像站,本教程使用CentOS7系统(考虑大量用户使用的版本)yum-yupdate关闭selinux和防火墙system......
  • 【K8s】专题十五(6):Kubernetes 网络之 Pod 网络调试
    本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口| 精选文章 | Kubernetes |Docker|Linux |羊毛资源 | 工具推荐 |往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决......
  • kubernetes 基本概念
    学习的目标是适用yml配置文件,使我们要构建的点描述出来。Kubernetes(简称K8s)是一个开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。它提供了丰富的功能集,包括但不限于声明式配置、自我修复、负载均衡和服务发现等。以下是关于Kubernetes的一些关键知......
  • Kubernetes 为什么减少对 Docker 的依赖:容器运行时演进背后的技术考量
    1、概述在当今的技术领域,容器技术的崛起与发展离不开Docker和Kubernetes的紧密合作。Docker以其创新性的容器化技术,推动了容器在全球范围内的广泛应用,为开发者提供了从容器镜像构建、容器启动与管理到镜像分发等一站式服务。Kubernetes则专注于大规模容器的编排和自动......
  • Kubernetes对象-命名空间
    Kubernetes对象-命名空间Kubernetes命名空间何时使用多个命名空间初始命名空间使用命名空间查看命名空间设置请求的命名空间设置命名空间首选项命名空间和DNS不是所有对象都位于命名空间中自动打标签链接Kubernetes命名空间在Kubernetes中,命名空间提供了一种隔......
  • Kubernetes 为什么减少对 Docker 的依赖:容器运行时演进背后的技术考量
    引言容器技术的发展离不开Docker和Kubernetes的深度合作。Docker推动了容器化技术的普及,而Kubernetes则为大规模容器编排和自动化管理提供了强有力的支持。然而,随着Kubernetes逐步发展,尤其是在容器运行时(ContainerRuntime)方面的需求发生变化,Kubernetes在1.20版本中......
  • 读书笔记:Kubernetes设计模式
    Kubernetes设计模式,BilginIbryam,RolandHuB著前言.3使用代码示例本书主页:https://k8spatterns.io/Github:https://github.com/k8spatterns/第1章引言131.1云原生之路.131.2分布式原语.15概念本地原语分布式原语行为封装类容器镜像行为实例对......
  • Kubernetes应用编排控制器
    1.Kubernetes控制器模式1.1声明式APIAPI设计方法命令式API也称为指令式API,用户需要一步步地告诉机器该如何做(How),机器自身不具有任何“智能”,只被动接受指令高度依赖用户自身理解和达成目标的能力和处理各类异常问题的经验,实现的是“命令式编程(ImperativeProgramming)”......