下载ISO文件:https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/latest/

1. 准备工作

以虚拟机VMWare为例。

使用EFI 非默认BIOS启动。如果不使用EFI,那么后续安装引导时也使用非EFI。

  • Controller-Panel节点(master)

    节点列表:

    hostname ip
    k8s-master1 10.0.2.101/24
    k8s-master2 10.0.2.102/24
    k8s-master3 10.0.2.103/24

    CPU设置:2Core

    内存设置:2GB

    磁盘:20GB

    网卡设置:网卡1(ens33)为自定义NAT

  • Worker节点

    节点列表:

    hostname ip
    k8s-worker1 10.0.2.111/24
    k8s-worker2 10.0.2.112/24
    k8s-worker3 10.0.2.113/24

    CPU设置:2Core

    内存设置:4GB

    磁盘:20GB

    网卡设置:网卡1(ens33)为自定义NAT

2. 磁盘管理

2.1 磁盘分区

使用GUID分区表,分2个区:

  • 1)EFI System(EF00),Last sector: +500M (500MB)

  • 2)Linux filesystem(8300) ,Last sector:<回车>(为剩余容量)

  1. gdisk /dev/sda

2.2 磁盘格式化

  1. mkfs.vfat -F32 /dev/sda1 # ESP分区 挂载 /boot
  2. mkfs.ext4 /dev/sda2 # LFS分区 挂载 /

2.3 磁盘挂载

  1. mount /dev/sda2 /mnt # 挂载root分区
  2. mkdir /mnt/boot # 创建 /boot 目录
  3. mount /dev/sda2 /mnt/boot # 挂载boot分区
  4. lsblk # 查看分区挂载情况

3. 安装系统

3.1 安装系统文件

  1. vim /etc/pacman.d/mirrorlist # 在顶部添加如下镜像服务器
  2. Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
  3. #Server = https://mirrors.aliyun.com/archlinux/$repo/os/$arch
  1. # 安装系统
  2. pacstrap /mnt base base-devel

3.2 配置fstab

  1. genfstab -U /mnt > /mnt/etc/fstab # 生成分区挂载表

编辑 fstab

  1. vim /mnt/etc/fstab
  2. # SSD的追加options “discard,noatime”

3.3 配置系统

编辑 /mnt/etc/pacman.conf文件,加入下面的内容:

  1. [archlinuxcn]
  2. Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
  3. #Server = https://mirrors.aliyun.com/archlinuxcn/$arch

切换root目录到新系统

  1. arch-chroot /mnt /bin/bash

现在可以全面升级系统:

  1. pacman -Syy # 切换了root目录,因此需要重新更新软件包缓存
  2. pacman -S archlinuxcn-keyring
  3. pacman -S vim bash-completion yay fakeroot
  4. ln -s /usr/bin/vim /usr/bin/vi

3.4 安装引导程序

  1. # 安装linux内核
  2. pacman -S linux-lts linux-firmware
  3. # 安装 Micro Code
  4. pacman -S amd-ucode # intel安装 intel-ucode
  1. bootctl install # boot-loader
  2. vim /boot/loader/entries/arch.conf
  3. title Arch Linux
  4. linux /vmlinuz-linux-lts
  5. initrd /amd-ucode.img # intel的为 /intel-ucode.img
  6. initrd /initramfs-linux-lts.img
  7. options root=/dev/sda2 rw
  8. vim /boot/loader/entries/arch-fallback.conf
  9. title Arch Linux (fallback initramfs)
  10. linux /vmlinuz-linux-lts
  11. initrd /amd-ucode.img # intel的为 /intel-ucode.img
  12. initrd /initramfs-linux-lts-fallback.img
  13. options root=/dev/sda2 rw
  14. vim /boot/efi/loader/loader.conf
  15. default arch.conf
  16. timeout 2
  17. console-mode max
  18. editor no
  19. # 验证文件路径是否正确
  20. bootctl list
  21. bootctl status

3.5 安装OpenSSH

  1. pacman -S openssh
  2. sed -i 's/#PermitRootLogin\ prohibit-passwd/PermitRootLogin yes/g' /etc/ssh/sshd_config
  3. systemctl enable sshd

3.6 主机名

  1. echo <host-name> > /etc/hostname

3.7 设置root密码

  1. passwd

3.8 网络配置

使用 systemd-networkd

  1. VMWare 网络配置:
  2. NAT模式
  3. 网段:10.0.2.0/24
  4. DHCP10.0.2.200 - 10.0.2.254
  5. 网关:10.0.2.2 (不要设置为10.0.2.1,否则会导致无法访问外网)
  1. vim /etc/systemd/network/20-wired.network
  2. [Match]
  3. Name=ens33
  4. [Network]
  5. #DHCP=ipv4 # 使用dhcp时启用
  6. Address=10.0.2.101/24
  7. Gateway=10.0.2.2
  8. DNS=223.5.5.5
  9. DNS=223.6.6.6
  1. systemctl enable systemd-networkd
  2. systemctl enable systemd-resolved

3.9 重启系统,并从硬盘引导

  1. exit # 退出chroot
  2. reboot # 重启后重新引导进入已安装的系统

3.10 本地化配置

  1. vim /etc/locale.gen
  2. en_US.UTF-8 UTF-8
  3. zh_CN.GBK GBK
  4. zh_CN.UTF-8 UTF-8
  5. zh_CN GB2312
  1. locale-gen # 生成locale
  2. echo 'LANG=en_US.UTF-8' > /etc/locale.conf # 设置默认的 locale

3.11 时区配置

  1. ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

3.12 硬件时间设置

  1. # date -s '2022-7-5 16:49:45'
  2. hwclock --systohc --utc #采用UTC,将系统时间写入硬件时钟
  3. # hwclock --hctosys --utc #采用UTC,将硬件时钟写入系统时间

4. 安装k8s

使用kubeadm安装: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

  1. pacman -S kubeadm kubelet kubectl containerd
  2. systemctl enable containerd
  3. systemctl start containerd
  4. systemctl enable kubelet
  5. systemctl start kubelet

4.1 配置containerd

创建 /etc/modules-load.d/containerd.conf 配置文件:

  1. cat << EOF > /etc/modules-load.d/containerd.conf
  2. overlay
  3. br_netfilter
  4. EOF

修改 containerd 配置

  1. # 修改配置
  2. mkdir -p /etc/containerd
  3. if [ ! -f /etc/containerd/config.toml ]; then
  4. containerd config default > /etc/containerd/config.toml
  5. fi
  6. # 设置 systemd_cgroup 为 true
  7. sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
  8. sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
  9. systemctl restart containerd
  10. echo 'alias docker="crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock"' >> ~/.bashrc
  11. source ~/.bashrc
  12. # 确保containerd 的cgroup 为 SystemdCgroup
  13. crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock info | grep SystemdCgroup | awk -F ': ' '{ print $2 }'
  14. true

4.2 拉取k8s镜像

通过参数 --image-repository 指定k8s镜像的仓库地址

  1. kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.24.2

4.3 创建k8s集群

  1. # 应搭建负载均衡后,使用负载均衡IP
  2. echo '10.0.2.101 cluster.berkaroad.com' >> /etc/hosts
  3. # 这个版本的kubelet,命令行参数 `--cni-bin-dir` 已经取消,因此需要拿掉此参数
  4. sed -i 's/--cni-bin-dir=\/usr\/lib\/cni//g' /etc/kubernetes/kubelet.env
  5. # 初始化k8s集群
  6. kubeadm init --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.24.2 --control-plane-endpoint=cluster.berkaroad.com --apiserver-advertise-address=10.0.2.101 --pod-network-cidr=10.100.0.0/16 --service-cidr=10.101.0.0/16 --service-dns-domain=cluster.berkaroad.com --upload-certs --v=5
  7. # 执行成功后,根据提示,配置
  8. mkdir -p $HOME/.kube
  9. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  10. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  11. # 注意:集群中时间必须保持一致,否则会加入集群失败,错误信息: x509: certificate has expired or is not yet valid: current time 2022-07-05T03:57:41+08:00 is before 2022-07-04T23:42:18Z
  12. # You can now join any number of the control-plane node running the following command on each as root:
  13. kubeadm join cluster.berkaroad.com:6443 --token v3e3b4.a52hqkbd1rlxgkun \
  14. --discovery-token-ca-cert-hash sha256:877bc4de6051c6aee8401bb99e6a3114f6d5a5fa7d87131c0b6377ce2419e5a3 \
  15. --control-plane --certificate-key 6b6050b43696814460032c521569377829e6bda6d39ac69e1d650d5bfdad1a44
  16. # 如果 --certificate-key 过期了,执行如下:
  17. kubeadm init phase upload-certs --upload-certs
  18. # Then you can join any number of worker nodes by running the following on each as root:
  19. kubeadm join cluster.berkaroad.com:6443 --token v3e3b4.a52hqkbd1rlxgkun \
  20. --discovery-token-ca-cert-hash sha256:877bc4de6051c6aee8401bb99e6a3114f6d5a5fa7d87131c0b6377ce2419e5a3
  21. # 如果token过期了,可以执行如下:
  22. kubeadm token create --print-join-command
  23. # 安装CNI:Calico
  24. kubectl apply -f https://projectcalico.docs.tigera.io/archive/v3.22/manifests/calico.yaml
  25. # 如果失败,检查 cgroup 是否一致(docker或者containerd 和 kubelet)
  26. # 查看 kubeadm 使用的 CRI 为 containerd 还是 docker
  27. cat /var/lib/kubelet/kubeadm-flags.env
  28. KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7"
  29. # 查看 kubelet 的 cgroup driver
  30. cat /var/lib/kubelet/config.yaml | grep cgroupDriver | awk -F ': ' '{ print $2 }'
  31. systemd

4.4 加入control-plane节点

  1. # 应搭建负载均衡后,使用负载均衡IP
  2. echo '10.0.2.101 cluster.berkaroad.com' >> /etc/hosts
  3. # 这个版本的kubelet,命令行参数 `--cni-bin-dir` 已经取消,因此需要拿掉此参数
  4. sed -i 's/--cni-bin-dir=\/usr\/lib\/cni//g' /etc/kubernetes/kubelet.env
  5. # 注意:集群中时间必须保持一致,否则会加入集群失败,错误信息: x509: certificate has expired or is not yet valid: current time 2022-07-05T03:57:41+08:00 is before 2022-07-04T23:42:18Z
  6. # You can now join any number of the control-plane node running the following command on each as root:
  7. kubeadm join cluster.berkaroad.com:6443 --token v3e3b4.a52hqkbd1rlxgkun \
  8. --discovery-token-ca-cert-hash sha256:877bc4de6051c6aee8401bb99e6a3114f6d5a5fa7d87131c0b6377ce2419e5a3 \
  9. --control-plane --certificate-key 6b6050b43696814460032c521569377829e6bda6d39ac69e1d650d5bfdad1a44
  10. # 如果 --certificate-key 过期了,执行如下:
  11. kubeadm init phase upload-certs --upload-certs
  12. # 如果token过期了,可以执行如下:
  13. kubeadm token create --print-join-command
  14. # 执行成功后,根据提示,配置
  15. mkdir -p $HOME/.kube
  16. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  17. sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.5 加入worker节点

  1. # 应搭建负载均衡后,使用负载均衡IP
  2. echo '10.0.2.101 cluster.berkaroad.com' >> /etc/hosts
  3. # 这个版本的kubelet,命令行参数 `--cni-bin-dir` 已经取消,因此需要拿掉此参数
  4. sed -i 's/--cni-bin-dir=\/usr\/lib\/cni//g' /etc/kubernetes/kubelet.env
  5. # 执行成功后,根据提示,配置
  6. mkdir -p $HOME/.kube
  7. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  8. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  9. # 注意:集群中时间必须保持一致,否则会加入集群失败,错误信息: x509: certificate has expired or is not yet valid: current time 2022-07-05T03:57:41+08:00 is before 2022-07-04T23:42:18Z
  10. # Then you can join any number of worker nodes by running the following on each as root:
  11. kubeadm join cluster.berkaroad.com:6443 --token v3e3b4.a52hqkbd1rlxgkun \
  12. --discovery-token-ca-cert-hash sha256:877bc4de6051c6aee8401bb99e6a3114f6d5a5fa7d87131c0b6377ce2419e5a3
  13. # 如果token过期了,可以执行如下:
  14. kubeadm token create --print-join-command

4.6 查看k8s集群节点信息

  1. kubectl get no -o wide
  2. NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
  3. k8s-master1 Ready control-plane 2d9h v1.24.2 10.0.2.101 <none> Arch Linux 5.15.50-1-lts containerd://1.6.6
  4. k8s-master2 Ready control-plane 2d5h v1.24.2 10.0.2.102 <none> Arch Linux 5.15.52-1-lts containerd://1.6.6
  5. k8s-master3 Ready control-plane 2d v1.24.2 10.0.2.103 <none> Arch Linux 5.15.52-1-lts containerd://1.6.6
  6. k8s-worker1 Ready <none> 3h4m v1.24.2 10.0.2.111 <none> Arch Linux 5.15.52-1-lts containerd://1.6.6
  7. k8s-worker2 Ready <none> 176m v1.24.2 10.0.2.112 <none> Arch Linux 5.15.52-1-lts containerd://1.6.6
  8. k8s-worker3 Ready <none> 176m v1.24.2 10.0.2.113 <none> Arch Linux 5.15.52-1-lts containerd://1.6.6

附录

包签名错误

  1. error: libcap: signature from "David Runge <dvzrv@archlinux.org>" is marginal trust
  2. :: File /var/cache/pacman/pkg/libcap-2.65-1-x86_64.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
  3. Do you want to delete it? [Y/n] Y
  4. error: failed to commit transaction (invalid or corrupted package)
  5. Errors occurred, no packages were upgraded.

更新pacman key证书

  1. pacman -S gnupg
  2. pacman -Sy archlinux-keyring
  3. pacman-key --populate archlinux
  4. pacman-key --refresh-keys
  5. pacman -Syux

从零开始基于Archlinux 安装 containerd + k8s的更多相关文章

  1. 使用kubeoperator安装的k8s集群以及采用的containerd容器运行时,关于采用的是cgroup 驱动还是systemd 驱动的说明

    使用kubeoperator安装的k8s集群,默认使用的是systemd驱动 # kubectl get cm -n kube-system NAME DATA AGE calico-config 4 ...

  2. 使用kubeoperator安装的k8s 版本1.20.14 将节点上的容器运行时从 Docker Engine 改为 containerd

    官方文档:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/change-runt ...

  3. ArchLinux安装与配置小结

    最近无意间发现一个基于ArchLinux的发行版--BlackArch,主题十分炫酷(中二).当然渗透类的Linux 发行版已经有BackTrack和Kali了,不过都是源于Debian的,使用者众多 ...

  4. Archlinux 安装配置指导 2015-05-24

    因为用的Linode VPS的系统是Archlinux的,想在本地弄个系统做测试用,这样比较方便.然后发现自己在6年前做的一个Archlinux 安装配置Flash,好怀念的赶脚. 时过进迁,没想到A ...

  5. Docker——基于Docker安装Drupal博客系统

    Docker--基于Docker安装Drupal博客系统 向脚本文件追加内容 cat << EOF > build.sh #设置主机名 hostnamectl set-hostnam ...

  6. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

  7. 基于VirtualBox安装Ubuntu图文教程

    基于VirtualBox虚拟机安装Ubuntu图文教程 一. 下载安装VirtualBox 官网下载VirtualBox,目前版本:VirtualBox 5.1.8 for Windows hosts ...

  8. ArchLinux 安装笔记:续 --zz

    续前话 在虚拟机里调试了几天,终于鼓起勇气往实体机安装了,到桌面环境为止的安装过程可以看我的前一篇文章<ArchLinux 安装笔记>.桌面环境我使用的是 GNOME,虽然用了很长一段时间 ...

  9. ArchLinux 安装笔记 --zz

    为何安装 ArchLinux 为了更深层次的理解 Linux (其实只是闲的蛋疼 准备安装介质 U盘首选,没有之一.自己的本子是 MBR 的,UEFI 神马的我才不知道呢哼! 制作 U 盘启动: Li ...

  10. MySQL 8.0.12 基于Windows 安装教程(超级详细)

    MySQL 8.0.12 基于Windows 安装教程(超级详细) (一步一步来,装不了你找我!) 本教程仅适用Windows系统,如果你原本装了没装上,一定要先删除原本的数据库,执行:mysqld ...

随机推荐

  1. java的两种线程

    java中的两种线程     守护线程与用户线程 守护线程:就是服务于用户线程的线程,例如垃圾回收的线程及时最典型的守护线程.不需要上层逻辑的介入 用户线程:就是程序自己创建的线程 守护线程; 守护线 ...

  2. 磊磊零基础打卡算法:day18 c++模拟哈希表来模拟散列表

    5.21 哈希表 Hash表又称为散列表,一般由Hash函数(散列函数)与链表结构共同实现,与离散化思想类似. 一般要求:防止冲突,便于查询 模拟hash表: 拉链法:两个核心操作insert(),f ...

  3. vue再请求头加token

    Vue:全局拦截所有请求,并在请求头中添加token - 道祖且长 - 博客园 (cnblogs.com) util.js export function sessionSet(user){ let ...

  4. BeanFactory与FactoryBean区别

    1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂.在Spring中,BeanFactory是IOC容器的核心接口,也是 ...

  5. LaTeX in 24 Hours - 2. Fonts Selection

    文章目录 本章内容:字体 2.1 Text-Mode Fonts 2.2 Math-Mode Fonts 2.3 Emphasized Fonts 2.4 Colored Fonts 其他章节目录: ...

  6. Cisco Packet Tracer(思科模拟器)安装,注册用户

    下载 下载地址见湖南科技大学老师:http://mooc1.xueyinonline.com/nodedetailcontroller/visitnodedetail?courseId=2226402 ...

  7. 每次新建项目都要重新配置Maven项目很麻烦,这里出一个小技巧,配置一次就直接搞定所有的

    Maven一次配置永久使用教程 首先,打开IDEA,将你目前放出来的项目关掉:(File->Close Project) 其次,在左侧栏里面选择这个: 然后,选择中间的这里: 接着,在弹出的页面 ...

  8. VMware虚拟机扩容--保姆级教学

    由于项目逐步的完善,需要搭建的中间件,软件越来越多,导致以前虚拟机配置20G的内存不够用了,又不想重新创建新的虚拟机,退而求更精,选择扩容. 1.外部先进入虚拟机设置,将磁盘先扩展,具体提示如下图所示 ...

  9. Redis使用ZSET实现消息队列使用总结一

    转载请注明出处: 目录 1.zset为什么可以做消息队列 2.zset实现消息队列的步骤 3.使用jedis实现消息队列示例 4.+inf与-inf 5.redis使用list与zset做消息队列有什 ...

  10. StringBuilder 导致堆内存溢出

    StringBuilder 导致堆内存溢出 原始问题描述: Exception in thread "main" java.lang.OutOfMemoryError: Java ...