云盘算实训43——摆设k8s根本情况、设置内核模块、基本组件安装 ...

打印 上一主题 下一主题

主题 525|帖子 525|积分 1575

一、前期体系情况准备

1、关闭防火墙与selinux

  1. [root@k8s-master ~]# systemctl stop firewalld
  2. [root@k8s-master ~]# systemctl disable firewalld
  3. Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
  4. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
  5. [root@k8s-master ~]# setenforce 0
  6. [root@k8s-master ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
  7. [root@k8s-master ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
复制代码
2、设置主机映射

  1. [root@k8s-master ~]# vim /etc/hosts
  2. 10.0.0.11 k8s-master
  3. 10.0.0.22 k8s-node01
  4. 10.0.0.33 k8s-node02
  5. [root@k8s-master ~]# scp /etc/hosts root@10.0.0.22:/etc/hosts
  6. [root@k8s-master ~]# scp /etc/hosts root@10.0.0.22:/etc/hosts
复制代码
3、测试映射结果

  1. [root@k8s-master ~]# ping k8s-node01
  2. PING k8s-node01 (10.0.0.22) 56(84) bytes of data.
  3. 64 bytes from k8s-node01 (10.0.0.22): icmp_seq=1 ttl=64 time=0.346 ms
  4. 64 bytes from k8s-node01 (10.0.0.22): icmp_seq=2 ttl=64 time=0.265 ms
  5. ^C
  6. --- k8s-node01 ping statistics ---
  7. 2 packets transmitted, 2 received, 0% packet loss, time 1000ms
  8. rtt min/avg/max/mdev = 0.265/0.305/0.346/0.044 ms
  9. [root@k8s-master ~]# ping k8s-node02
  10. PING k8s-node02 (10.0.0.33) 56(84) bytes of data.
  11. 64 bytes from k8s-node02 (10.0.0.33): icmp_seq=1 ttl=64 time=0.306 ms
  12. 64 bytes from k8s-node02 (10.0.0.33): icmp_seq=2 ttl=64 time=0.193 ms
  13. ^C
  14. --- k8s-node02 ping statistics ---
  15. 2 packets transmitted, 2 received, 0% packet loss, time 1000ms
复制代码
4、设置主机间免密登录

  1. [root@k8s-master ~]# ssh-keygen
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/root/.ssh/id_rsa):
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. Your identification has been saved in /root/.ssh/id_rsa.
  7. Your public key has been saved in /root/.ssh/id_rsa.pub.
  8. The key fingerprint is:
  9. SHA256:pJNP7Nx9pi00P7w8nBNECxdAyHyKPnc6UNaLdXYs6b8 root@k8s-master
  10. The key's randomart image is:
  11. +---[RSA 2048]----+
  12. |         o oo... |
  13. |          + o o |
  14. |       .. + + + |
  15. |       =. + o B o|
  16. |      +.So o * o |
  17. |       *+.o.= o |
  18. |        ++.+.=o+ |
  19. |         o .*O .|
  20. |           ...+E.|
  21. +----[SHA256]-----+
  22. [root@k8s-master ~]# ssh-copy-id root@10.0.0.22
  23. /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed:
  24. "/root/.ssh/id_rsa.pub"
  25. /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to
  26. filter out any that are already installed
  27. /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are
  28. prompted now it is to install the new keys
  29. root@10.0.0.22's password:
  30. Number of key(s) added: 1
  31. Now try logging into the machine, with:   "ssh 'root@10.0.0.22'"
  32. and check to make sure that only the key(s) you wanted were added.
  33. [root@k8s-master ~]# ssh-copy-id root@10.0.0.33
复制代码
5、设置yum源

  1. [root@k8s-master ~]# cd /etc/yum.repos.d/
  2. # docker软件源
  3. [root@k8s-master yum.repos.d]# vim docker-ce.repo
  4. [docker-ce-stable]
  5. name=Docker CE Stable - $basearch
  6. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/$basearch/stable
  7. enabled=1
  8. gpgcheck=1
  9. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  10. [docker-ce-stable-debuginfo]
  11. name=Docker
  12. CE Stable - Debuginfo $basearch
  13. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/debug-$basearch/stable
  14. enabled=0
  15. gpgcheck=1
  16. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  17. [docker-ce-stable-source]
  18. name=Docker
  19. CE Stable - Sources
  20. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/source/stable
  21. enabled=0
  22. gpgcheck=1
  23. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  24. [docker-ce-test]
  25. name=Docker CE Test - $basearch
  26. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/$basearch/test
  27. enabled=0
  28. gpgcheck=1
  29. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  30. [docker-ce-test-debuginfo]
  31. name=Docker
  32. CE Test - Debuginfo $basearch
  33. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/debug-$basearch/test
  34. enabled=0
  35. gpgcheck=1
  36. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  37. [docker-ce-test-source]
  38. name=Docker
  39. CE Test - Sources
  40. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/source/test
  41. enabled=0
  42. gpgcheck=1
  43. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  44. [docker-ce-nightly]
  45. name=Docker
  46. CE Nightly - $basearch
  47. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/$basearch/nightly
  48. enabled=0
  49. gpgcheck=1
  50. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  51. [docker-ce-nightly-debuginfo]
  52. name=Docker
  53. CE Nightly - Debuginfo $basearch
  54. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/debug-$basearch/nightly
  55. enabled=0
  56. gpgcheck=1
  57. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  58. [docker-ce-nightly-source]
  59. name=Docker
  60. CE Nightly - Sources
  61. baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/source/nightly
  62. enabled=0
  63. gpgcheck=1
  64. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  65. #
  66. K8S软件源
  67. [root@k8s-master yum.repos.d]# vim kubernetes.repo
  68. [kubernetes]
  69. name=Kubernetes
  70. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-
  71. x86_64/
  72. enabled=1
  73. gpgcheck=0
  74. repo_gpgcheck=0
  75. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  76. [root@k8s-master yum.repos.d]# yum clean all && yum makecache
  77. [root@k8s-master yum.repos.d]# scp docker-ce.repo
  78. root@10.0.0.22:/etc/yum.repos.d/
  79. docker-ce.repo                                                   100% 2073  
  80.   1.9MB/s   00:00    
  81. [root@k8s-master yum.repos.d]# scp kubernetes.repo
  82. root@10.0.0.22:/etc/yum.repos.d/
  83. kubernetes.repo                                                  100%  211  
  84. 281.2KB/s   00:00
  85. [root@k8s-master yum.repos.d]# scp docker-ce.repo
  86. root@10.0.0.33:/etc/yum.repos.d/
  87. docker-ce.repo                                                   100% 2073  
  88.   1.9MB/s   00:00    
  89. [root@k8s-master yum.repos.d]# scp kubernetes.repo
  90. root@10.0.0.33:/etc/yum.repos.d/
  91. kubernetes.repo                                                  100%  211  
  92. 281.2KB/s   00:00
复制代码
6、安装必备工具

  1. [root@k8s-master ~]# yum install wget jq psmisc vim net-tools telnet yum-utils
  2. device-mapper-persistent-data lvm2 git -y
复制代码
7、关闭swap 分区

  1. [root@k8s-master ~]# swapoff -a && sysctl -w vm.swappiness=0
  2. vm.swappiness = 0
  3. [root@k8s-master ~]# sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
复制代码
8、同步时间

  1. [root@k8s-master ~]# yum -y install ntpdate
  2. [root@k8s-master ~]# ntpdate time2.aliyun.com
  3. 4 Sep 10:08:59 ntpdate[1897]: adjust time server 203.107.6.88 offset 0.007780
  4. sec
  5. [root@k8s-master ~]# which ntpdate
  6. /usr/sbin/ntpdate
  7. [root@k8s-master ~]# crontab -e
  8. * 5 * * * /usr/sbin/ntpdate time2.aliyun.com
复制代码
9、设置 limit

  1. # 单个进程可以打开的⽂件数量将被限制为 65535
  2. [root@k8s-master ~]# ulimit -SHn 65535
  3. [root@k8s-master ~]# vim /etc/security/limits.conf
  4. # 末尾添加如下内容
  5. * soft nofile 65536
  6. * hard nofile 131072
  7. * soft nproc 65535
  8. * hard nproc 655350
  9. * soft memlock unlimited
  10. * hard memlock unlimited
复制代码
10、安装 k8s ⾼可⽤性 Git 仓库并重启

  1. # 在 /root/ ⽬录下克隆⼀个名为 k8s-ha-install.git 的 Git 仓库
  2. [root@k8s-master ~]# git clone https://gitee.com/dukuan/k8s-ha-install.git
  3. 正克隆到 'k8s-ha-install'...
  4. remote: Enumerating objects: 920, done.
  5. remote: Counting objects: 100% (8/8), done.
  6. remote: Compressing objects: 100% (6/6), done.
  7. remote: Total 920 (delta 1), reused 0 (delta 0), pack-reused 912
  8. 接收对象中: 100% (920/920), 19.74 MiB | 1.51 MiB/s, done.
  9. 处理 delta 中: 100% (388/388), done.
  10. [root@k8s-master ~]# cd k8s-ha-install/
  11. [root@k8s-master k8s-ha-install]# ls
  12. calico.yaml krm.yaml LICENSE metrics-server-0.3.7 metrics-server-3.6.1
  13. README.md
  14. [root@k8s-master k8s-ha-install]# reboot
复制代码
二、设置内核模块

1、设置ipvs模块

  1. [root@k8s-master ~]# yum install ipvsadm ipset sysstat conntrack libseccomp -
  2. y
  3. # 使⽤ modprobe 命令加载内核模块,核⼼ IPVS 模块。
  4. [root@k8s-master ~]# modprobe -- ip_vs
  5. # IPVS 负载均衡算法 rr。
  6. [root@k8s-master ~]# modprobe -- ip_vs_rr
  7. # IPVS 负载均衡算法 wrr
  8. [root@k8s-master ~]# modprobe -- ip_vs_wrr
  9. # ⽤于源端负载均衡的模块
  10. [root@k8s-master ~]# modprobe -- ip_vs_sh
  11. # ⽤于⽹络流量过滤和跟踪的模块
  12. [root@k8s-master ~]# modprobe -- nf_conntrack
  13. # 在系统启动时加载下列 IPVS 和相关功能所需的模块
  14. [root@k8s-master ~]# find / -name "ipvs.config"
  15. [root@k8s-master ~]# vim /etc/modules-load.d/ipvs.config
  16. ip_vs
  17. # 负载均衡模块
  18. ip_vs_lc
  19. # ⽤于实现基于连接数量的负载均衡算法
  20. ip_vs_wlc
  21. # ⽤于实现带权重的最少连接算法的模块
  22. ip_vs_rr
  23. # 负载均衡rr算法模块
  24. ip_vs_wrr
  25. # 负载均衡wrr算法模块
  26. ip_vs_lblc
  27. # 负载均衡算法,它结合了最少连接(LC)算法和基于偏置的轮询(Round Robin with Bias)算法
  28. ip_vs_lblcr
  29. # ⽤于实现基于链路层拥塞状况的最少连接负载调度算法的模块
  30. ip_vs_dh
  31. # ⽤于实现基于散列(Hashing)的负载均衡算法的模块
  32. ip_vs_sh
  33. # ⽤于源端负载均衡的模块
  34. ip_vs_fo
  35. # ⽤于实现基于本地服务的负载均衡算法的模块
  36. ip_vs_nq
  37. # ⽤于实现NQ算法的模块
  38. ip_vs_sed
  39. # ⽤于实现随机早期检测(Random Early Detection)算法的模块
  40. ip_vs_ftp
  41. # ⽤于实现FTP服务的负载均衡模块
  42. ip_vs_sh
  43. nf_conntrack
  44. # ⽤于跟踪⽹络连接的状态的模块
  45. ip_tables
  46. # ⽤于管理防护墙的机制
  47. ip_set
  48. # ⽤于创建和管理IP集合的模块
  49. xt_set
  50. # ⽤于处理IP数据包集合的模块,提供了与iptables等⽹络⼯具的接⼝
  51. ipt_set
  52. # ⽤于处理iptables规则集合的模块
  53. ipt_rpfilter
  54. # ⽤于实现路由反向路径过滤的模块
  55. ipt_REJECT
  56. # iptables模块之⼀,⽤于将不符合规则的数据包拒绝,并返回特定的错误码
  57. ipip
  58. # ⽤于实现IP隧道功能的模块,使得数据可以在两个⽹络之间进⾏传输
  59. [root@k8s-master ~]# sysctl --system
  60. * Applying /usr/lib/sysctl.d/00-system.conf ...
  61. * Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
  62. kernel.yama.ptrace_scope = 0
  63. * Applying /usr/lib/sysctl.d/50-default.conf ...
  64. kernel.sysrq = 16
  65. kernel.core_uses_pid = 1
  66. net.ipv4.conf.default.rp_filter = 1
  67. net.ipv4.conf.all.rp_filter = 1
  68. net.ipv4.conf.default.accept_source_route = 0
  69. net.ipv4.conf.all.accept_source_route = 0
  70. net.ipv4.conf.default.promote_secondaries = 1
  71. net.ipv4.conf.all.promote_secondaries = 1
  72. fs.protected_hardlinks = 1
  73. fs.protected_symlinks = 1
  74. * Applying /etc/sysctl.d/99-sysctl.conf ...
  75. * Applying /etc/sysctl.conf ...
  76. # 开机⾃启systemd默认提供的⽹络管理服务
  77. [root@k8s-master ~]# systemctl enable systemd-modules-load.service
  78. [root@k8s-master ~]# systemctl start systemd-modules-load.service
  79. # 查看已写⼊加载的模块
  80. [root@k8s-master ~]# lsmod | grep -e ip_vs -e nf_conntrack
  81. ip_vs_sh               12688  0
  82. ip_vs_wrr              12697  0
  83. ip_vs_rr               12600  0
  84. ip_vs                 141432  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
  85. nf_conntrack          133053  1 ip_vs
  86. libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
复制代码
2、设置k8s内核

  1. # 写⼊k8s所需内核模块
  2. [root@k8s-master ~]# vim /etc/sysctl.d/k8s.conf
  3. net.bridge.bridge-nf-call-iptables = 1
  4. # 控制⽹络桥接与iptables之间的⽹络转发⾏为
  5. net.bridge.bridge-nf-call-ip6tables = 1
  6. # ⽤于控制⽹络桥接(bridge)的IP6tables过滤规则。当该参数设置为1时,表示启⽤对⽹络桥接的
  7. IP6tables过滤规则
  8. fs.may_detach_mounts = 1
  9. # ⽤于控制⽂件系统是否允许分离挂载,1表示允许
  10. net.ipv4.conf.all.route_localnet = 1
  11. # 允许本地⽹络上的路由。设置为1表示允许,设置为0表示禁⽌。
  12. vm.overcommit_memory=1
  13. # 控制内存分配策略。设置为1表示允许内存过量分配,设置为0表示不允许。
  14. vm.panic_on_oom=0
  15. # 决定当系统遇到内存不⾜(OOM)时是否产⽣panic。设置为0表示不产⽣panic,设置为1表示产⽣
  16. panic。
  17. fs.inotify.max_user_watches=89100
  18. # inotify可以监视的⽂件和⽬录的最⼤数量。
  19. fs.file-max=52706963
  20. # 系统级别的⽂件描述符的最⼤数量。
  21. fs.nr_open=52706963
  22. # 单个进程可以打开的⽂件描述符的最⼤数量。
  23. net.netfilter.nf_conntrack_max=2310720
  24. # ⽹络连接跟踪表的最⼤⼤⼩。
  25. net.ipv4.tcp_keepalive_time = 600
  26. # TCP保活机制发送探测包的间隔时间(秒)。
  27. net.ipv4.tcp_keepalive_probes = 3
  28. # TCP保活机制发送探测包的最⼤次数。
  29. net.ipv4.tcp_keepalive_intvl =15
  30. # TCP保活机制在发送下⼀个探测包之前等待响应的时间(秒)。
  31. net.ipv4.tcp_max_tw_buckets = 36000
  32. # TCP TIME_WAIT状态的bucket数量。
  33. net.ipv4.tcp_tw_reuse = 1
  34. # 允许重⽤TIME_WAIT套接字。设置为1表示允许,设置为0表示不允许。
  35. net.ipv4.tcp_max_orphans = 327680
  36. # 系统中最⼤的孤套接字数量。
  37. net.ipv4.tcp_orphan_retries = 3
  38. # 系统尝试重新分配孤套接字的次数。
  39. net.ipv4.tcp_syncookies = 1
  40. # ⽤于防⽌SYN洪⽔攻击。设置为1表示启⽤SYN cookies,设置为0表示禁⽤。
  41. net.ipv4.tcp_max_syn_backlog = 16384
  42. # SYN连接请求队列的最⼤⻓度。
  43. net.ipv4.ip_conntrack_max = 65536
  44. # IP连接跟踪表的最⼤⼤⼩。
  45. net.ipv4.tcp_max_syn_backlog = 16384
  46. # 系统中最⼤的监听队列的⻓度。
  47. net.ipv4.tcp_timestamps = 0
  48. # ⽤于关闭TCP时间戳选项。
  49. net.core.somaxconn = 16384
  50. # ⽤于设置系统中最⼤的监听队列的⻓度
  51. # 保存后,所有节点重启,保证重启后内核依然加载
  52. [root@k8s-master ~]# lsmod | grep --color=auto -e ip_vs -e nf_conntrack
  53. ip_vs_sh               12688  0
  54. ip_vs_wrr              12697  0
  55. ip_vs_rr               12600  0
  56. ip_vs                 141432  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
  57. nf_conntrack          133053  1 ip_vs
  58. libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
复制代码
三、基本组件安装

1、安装 Containerd

1)安装 Docker
  1. # 卸载之前的containerd
  2. [root@k8s-master ~]# yum remove -y podman runc containerd
  3. # 安装Docker和containerd
  4. [root@k8s-master ~]# yum install containerd.io docker-ce dockerce-cli -y
复制代码
2)设置 Containerd 所需模块
  1. [root@k8s-master ~]# cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
  2. > overlay
  3. > br_netfilter
  4. > EOF
  5. overlay # ⽤于⽀持Overlay⽹络⽂件系统的模块,它可以在现有的⽂件系统之上创建叠加层,以实现
  6. 虚拟化、隔离和管理等功能。
  7. br_netfilter # ⽤于containerd的⽹络过滤模块,它可以对进出容器的⽹络流量进⾏过滤和管理。
  8. [root@k8s-master ~]# cat /etc/modules-load.d/containerd.conf
  9. overlay
  10. br_netfilter
  11. [root@k8s-master ~]# modprobe -- overlay
  12. [root@k8s-master ~]# modprobe -- br_netfilter
复制代码
3)设置 Containerd 所需内核
  1. [root@k8s-master ~]# vim /etc/sysctl.d/99-kubernetes-cri.conf
  2. net.bridge.bridge-nf-call-iptables  = 1
  3. # ⽤于控制⽹络桥接是否调⽤iptables进⾏包过滤和转发。
  4. net.ipv4.ip_forward                 = 1
  5. # 路由转发,1为开启
  6. net.bridge.bridge-nf-call-ip6tables = 1
  7. # 控制是否在桥接接⼝上调⽤IPv6的iptables进⾏数据包过滤和转发。
  8. [root@k8s-master ~]# sysctl --system
复制代码
4)Containerd 设置⽂件
  1. [root@k8s-master ~]# mkdir -p /etc/containerd
  2. # 读取containerd的配置并保存到/etc/containerd/config.toml
  3. [root@k8s-master ~]# containerd config default | tee
  4. /etc/containerd/config.toml
  5. [root@k8s-master ~]# vim /etc/containerd/config.toml
  6. # 找到第63行修改为sandbox_image = "registry.cnhangzhou.aliyuncs.com/google_containers/pause:3.9"
  7. #
  8. 找到containerd.runtimes.runc.options模块,添加SystemdCgroup = false,如果已经存
  9. 在则直接修改(在第127行)
  10. # 添加sandbox_image = "registry.cnhangzhou.aliyuncs.com/google_containers/pause:3.9"(第128行)
复制代码


  1. # 加载systemctl控制脚本
  2. [root@k8s-master ~]# systemctl daemon-reload
  3. # 启动containerd并设置开机启动
  4. [root@k8s-master ~]# systemctl start containerd.service
  5. [root@k8s-master ~]# systemctl enable containerd.service
  6. Created symlink from /etc/systemd/system/multiuser.target.wants/containerd.service
  7. to
  8. /usr/lib/systemd/system/containerd.service.
复制代码
5)设置 crictl 客户端连接的运⾏位置
  1. # 配置容器运⾏环境的crictl.yml⽂件
  2. [root@k8s-master ~]# vim /etc/crictl.yaml
  3. runtime-endpoint: unix:///run/containerd/containerd.sock
  4. # 指定了容器运⾏时的地址为:unix://...
  5. image-endpoint: unix:///run/containerd/containerd.sock
  6. # 指定了镜像运⾏时的地址为:unix://...
  7. timeout: 10
  8. # 设置了超时时间为10秒
  9. debug: false
  10. # 关闭调试模式
复制代码
2、安装 Kubernetes 组件

  1. # 安装 Kubeadm、Kubelet 和 Kubectl
  2. # 查询最新的Kubernetes版本号
  3. [root@k8s-master ~]# yum list kubeadm.x86_64 --showduplicates | sort -r
  4. # 安装1.28最新版本kubeadm、kubelet和kubectl
  5. [root@k8s-master ~]# yum install kubeadm-1.28* kubelet-1.28* kubectl-1.28* -y
  6. [root@k8s-master ~]# systemctl daemon-reload
  7. # 允许开机⾃启kubelet
  8. [root@k8s-master ~]# systemctl enable --now kubelet
  9. # 查看当前安装的kubeadm版本号
  10. [root@k8s-master ~]# kubeadm version
  11. kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.2",
  12. GitCommit:"89a4ea3e1e4ddd7f7572286090359983e0387b2f", GitTreeState:"clean",
  13. BuildDate:"2023-09-13T09:34:32Z", GoVersion:"go1.20.8", Compiler:"gc",
  14. Platform:"linux/amd64"}
复制代码
3、Kubernetes 集群初始化

1)Kubeadm 设置⽂件
  1. # 修改kubeadm配置⽂件
  2. [root@k8s-master ~]# vim kubeadm-config.yaml
  3. apiVersion: kubeadm.k8s.io/v1beta3
  4.     # 指定Kubernetes配置文件的版本,使用的是kubeadm API的v1beta3版本
  5. bootstrapTokens:
  6. # 定义bootstrap tokens的信息。这些tokens用于在Kubernetes集群初始化过程中进行身份验证
  7. - groups:
  8. # 定义了与此token关联的组
  9.  - system:bootstrappers:kubeadm:default-node-token
  10. token: 7t2weq.bjbawausm0jaxury
  11.  # bootstrap token的值
  12. ttl: 24h0m0s
  13. # token的生存时间,这里设置为24小时
  14. usages:
  15. # 定义token的用途
  16.  - signing
  17.  # 数字签名
  18.  - authentication
  19.   # 身份验证
  20. kind: InitConfiguration
  21.  # 指定配置对象的类型,InitConfiguration:表示这是一个初始化配置
  22. localAPIEndpoint:
  23.  # 定义本地API端点的地址和端口
  24. advertiseAddress: 192.168.15.11
  25. bindPort: 6443
  26. nodeRegistration:
  27. # 定义节点注册时的配置
  28. criSocket: unix:///var/run/containerd/containerd.sock
  29.   # 容器运行时(CRI)的套接字路径
  30. name: k8s-master
  31.   # 节点的名称
  32. taints:              
  33. # 标记
  34.  - effect: NoSchedule
  35.  # 免调度节点
  36.   key: node-role.kubernetes.io/control-plane        
  37.  # 该节点为控制节点
  38. ---
  39. apiServer:
  40.  # 定义了API服务器的配置
  41. certSANs:
  42.  # 为API服务器指定了附加的证书主体名称(SAN),指定IP即可
  43.  - 192.168.15.11
  44. timeoutForControlPlane: 4m0s
  45.  # 控制平面的超时时间,这里设置为4分钟
  46. apiVersion: kubeadm.k8s.io/v1beta3
  47. # 指定API Server版本
  48. certificatesDir: /etc/kubernetes/pki
  49.  # 指定了证书的存储目录
  50. clusterName: kubernetes
  51.  # 定义了集群的名称为"kubernetes"
  52. controlPlaneEndpoint: 192.168.15.11:6443
  53.  # 定义了控制节点的地址和端口
  54. controllerManager: {}
  55.  # 控制器管理器的配置,为空表示使用默认配置
  56. etcd:
  57.  # 定义了etcd的配置
  58. local:
  59.  # 本地etcd实例
  60.   dataDir: /var/lib/etcd
  61.  # 数据目录
  62. imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
  63.   # 指定了Kubernetes使用的镜像仓库的地址,阿里云的镜像仓库。
  64. kind: ClusterConfiguration
  65.   # 指定了配置对象的类型,ClusterConfiguration:表示这是一个集群配置
  66. kubernetesVersion: v1.28.2
  67.   # 指定了kubernetes的版本
  68. networking:
  69. # 定义了kubernetes集群网络设置
  70. dnsDomain: cluster.local
  71.  # 定义了集群的DNS域为:cluster.local
  72. podSubnet: 172.16.0.0/16
  73.  # 定义了Pod的子网
  74. serviceSubnet: 10.96.0.0/16
  75.  # 定义了服务的子网
  76. scheduler: {}
  77.    # 使用默认的调度器行为
  78. # 将旧的kubeadm配置⽂件转换为新的格式
  79. [root@k8s-master ~]# kubeadm config migrate --old-config kubeadm-config.yaml
  80. --new-config new.yaml
  81. [root@k8s-master ~]# vim new.yaml
  82. # 修改第12行、24行、29行的ip地址为自己本机的ip地址
复制代码

2)下载组件镜像
  1. # 通过新的配置⽂件new.yaml从指定的阿⾥云仓库拉取kubernetes组件镜像
  2. [root@k8s-master ~]# kubeadm config images pull --config /root/new.yaml
  3. [config/images] Pulled registry.cnhangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.28.2
  4. [config/images]
  5. Pulled registry.cnhangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.28.2
  6. [config/images]
  7. Pulled registry.cnhangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.28.2
  8. [config/images]
  9. Pulled registry.cnhangzhou.aliyuncs.com/google_containers/kube-proxy:v1.28.2
  10. [config/images]
  11. Pulled registry.cnhangzhou.aliyuncs.com/google_containers/pause:3.9
  12. [config/images]
  13. Pulled registry.cnhangzhou.aliyuncs.com/google_containers/etcd:3.5.9-0
  14. [config/images]
  15. Pulled registry.cnhangzhou.aliyuncs.com/google_containers/coredns:v1.10.1
复制代码
3)集群初始化
  1. [root@k8s-master ~]# kubeadm init --config /root/new.yaml --upload-certs
  2. # 等待初始化后保存这些命令
  3. # 当需要加⼊新node节点时,只复制这执行即可
  4. [root@k8s-master ~]# vim token.txt
  5. kubeadm join 10.0.0.200:6443 --token 7t2weq.bjbawausm0jaxury --discoverytoken-ca-cert-hash
  6. sha256:92191cb8741805ac561c5781d936f60a44a3233740209abf6e64738bfecd4c5e
  7. # 当需要⾼可⽤master集群时,将整个token复制下来
  8. --control-plane --certificate-key
  9. f9984be15f98141b212efa176c7a49fcda982888f8869b7cc668e661982cbcc0
复制代码
4)初始化错误解决

错误信息表现本机内存不够,cpu数量不够,我们现在将本机内存提到4个G,cpu数量提到4个 注意要关闭本主机然后进行修改主机设置的操作

  1. [root@k8s-master ~]# kubeadm init --config /root/new.yaml --upload-certs
复制代码

  1. 错误信息显示需要修改配置文件/proc/sys/net/ipv4/ip_forward
  2. [root@k8s-master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
  3. [root@k8s-master ~]# kubeadm init --config /root/new.yaml --upload-certs
复制代码

  1. # 检查kubelet为运行状态
  2. [root@master ~]# systemctl status kubelet
  3. Active: active (running) since 五 2024-09-06 17:33:30 CST; 5min ago
  4. # 可能是配置文件的地址没有改,所以找不到主机,所以超时
  5. [root@k8s-master ~]# vim new.yaml
  6. # 修改第12行、24行、29行的ip地址为自己本机的ip地址
  7. # 初始化重置
  8. [root@k8s-master ~]# kubeadm reset -f ; ipvsadm --clear ; rm -rf ~/.kube
  9. [root@k8s-master ~]# kubeadm init --config /root/new.yaml --upload-certs
复制代码
5)加载情况变量
  1. [root@k8s-master ~]# vim /root/.bashrc
  2. export KUBECONFIG=/etc/kubernetes/admin.conf
  3. [root@k8s-master ~]# source /root/.bashrc
复制代码
6)查看组件容器状态
之前采⽤初始化安装⽅式,所有的体系组件均以容器的⽅式运⾏ 并且在 kube-system 定名空间内, 此时可以查看 Pod(容器 组)状态
  1. [root@k8s-master ~]# kubectl get po -n kube-system
  2. NAME                                 READY   STATUS   RESTARTS   AGE
  3. coredns-6554b8b87f-2jslr             0/1     Pending   0         10m
  4. coredns-6554b8b87f-mmgbd             0/1     Pending   0         10m
  5. etcd-k8s-master                      1/1     Running   0         10m
  6. kube-apiserver-k8s-master            1/1     Running   0         10m
  7. kube-controller-manager-k8s-master   1/1     Running   3         10m
  8. kube-proxy-tvk64                     1/1     Running   0         10m
  9. kube-scheduler-k8s-master            1/1     Running   3         10m
  10. # kubectl:k8s控制命令
  11. # get:获取参数
  12. # po:pod缩写
  13. # -n:指定命名空间
  14. # kube-system:命名空间
复制代码
4、Token 过期处理

注意:以下步骤是上述初始化下令产⽣的 Token 过期了才需要执 ⾏以下步骤,如果没有过期不需要 执⾏,直接 join 即可。
Token 过期后⽣成新的 token
  1. kubeadm token create --print-join-command
复制代码
Master 需要⽣成 --certificate-key:
  1. kubeadm init phase upload-certs  --upload-certs
复制代码
5、Node 节点设置

Node 节点上主要摆设公司的⼀些业务应⽤,⽣产情况中不建议 Master 节点摆设体系组件之外的其 他 Pod,测试情况可以答应 Master 节点摆设 Pod 以节流体系资源。
1)查看集群信息
  1. [root@k8s-master ~]# kubectl get node
  2. NAME         STATUS     ROLES           AGE   VERSION
  3. k8s-master   NotReady   control-plane   25s   v1.28.2
复制代码
2)node 结点根本情况设置
  1. [root@node01 ~]# systemctl stop firewalld
  2. [root@node01 ~]# systemctl disable firewalld
  3. Removed symlink /etc/systemd/system/multiuser.target.wants/firewalld.service.
  4. Removed
  5. symlink /etc/systemd/system/dbusorg.fedoraproject.FirewallD1.service.
  6. [root@node01
  7. ~]# setenforce 0
  8. [root@node01 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g'
  9. /etc/sysconfig/selinux
  10. [root@node01 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g'
  11. /etc/selinux/config
  12. [root@node01 ~]# vim /etc/hosts
  13. [root@node01 ~]# ls /etc/yum.repos.d/
  14. CentOS-Base.repo epel.repo         hh.repo         repo.tar.gz
  15. docker-ce.repo   epel-testing.repo kubernetes.repo
  16. [root@node01 ~]# yum clean all && yum makecache
  17. [root@node01 ~]# yum install wget jq psmisc vim net-tools telnet yum-utils
  18. device-mapper-persistent-data lvm2 git -y
  19. [root@k8s-master ~]# scp /etc/modules-load.d/containerd.conf
  20. root@10.0.0.250:/etc/modules-load.d/containerd.conf
  21. [root@node01 ~]# vim /etc/modules-load.d/containerd.conf
  22. [root@node01 ~]# modprobe -- br_netfilter
  23. [root@node01 ~]# modprobe -- overlay
  24. [root@k8s-master ~]# scp /etc/sysctl.d/99-kubernetes-cri.conf
  25. root@10.0.0.250:/etc/sysctl.d/99-kubernetes-cri.conf
  26. [root@node01 ~]# vim /etc/sysctl.d/99-kubernetes-cri.conf
  27. [root@node01 ~]# sysctl --system
  28. [root@k8s-master ~]# scp /etc/containerd/config.toml
  29. root@10.0.0.250:/etc/containerd/config.toml
  30. [root@node01 ~]# vim /etc/containerd/config.toml
  31. [root@node01 ~]# systemctl enable --now containerd
  32. [root@node01 ~]# cat > /etc/crictl.yaml <<EOF
  33. > runtime-endpoint: unix:///run/containerd/containerd.sock
  34. > image-endpoint: unix:///run/containerd/containerd.sock
  35. > timeout: 10
  36. > debug: false
  37. > EOF
  38. root@node01 ~]# systemctl status containerd
  39. Active: active (running) since 五 2024-09-06 21:41:46 CST; 2min 13s ago
  40. [root@node01 ~]# yum install kubeadm-1.28* kubelet-1.28* kubectl-1.28* -y
  41. [root@node01 ~]# systemctl daemon-reload
  42. [root@node01 ~]# systemctl enable --now kubelet
  43. [root@node01 ~]# systemctl status kubelet
  44. [root@node01 ~]# yum -y install ntpdate
  45. [root@node01 ~]# ntpdate time2.aliyun.com
  46. [root@node01 ~]# crontab -e
  47. * 5 * * * /usr/sbin/ntpdate time2.aliyun.com
  48. [root@node01 ~]# ulimit -SHn 65535
  49. [root@k8s-master ~]# scp /etc/security/limits.conf
  50. root@10.0.0.250:/etc/security/limits.conf
  51. [root@node01 ~]# vim /etc/security/limits.conf
  52. [root@k8s-master ~]# scp /etc/sysctl.d/k8s.conf
  53. root@10.0.0.250:/etc/sysctl.d/k8s.con
  54. [root@node01 ~]# vim /etc/sysctl.d/k8s.conf
  55. [root@node01 ~]# yum install docker-ce docker-ce-cli containerd.io -y
复制代码

  1. # node01通过复制master初始化⽣成的token来加⼊集群
  2. [root@node01 ~]# kubeadm join 10.0.0.200:6443 --token 7t2weq.bjbawausm0jaxury
  3. --discovery-token-ca-cert-hash
  4. sha256:92191cb8741805ac561c5781d936f60a44a3233740209abf6e64738bfecd4c5e
复制代码

  1. [root@node01 ~]# swapoff -a && sysctl -w vm.swappiness=0
  2. [root@node01 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码

  1. [root@k8s-master ~]# kubeadm token create --print-join-command
  2. kubeadm join 10.0.0.200:6443 --token mwq6bb.h4eqdzp5vjyhe4iy --discoverytoken-ca-cert-hashsha256:92191cb8741805ac561c5781d936f60a44a3233740209abf6e64738bfecd4c5e [root@node01 ~]# kubeadm join 10.0.0.200:6443 --token mwq6bb.h4eqdzp5vjyhe4iy --discovery-token-ca-cert-hash sha256:92191cb8741805ac561c5781d936f60a44a3233740209abf6e64738bfecd4c5e
复制代码
   

  1. [root@k8s-master ~]# kubectl get node
  2. NAME         STATUS     ROLES           AGE   VERSION
  3. k8s-master   NotReady   control-plane   24h   v1.28.2
  4. node01       NotReady   <none>         68s   v1.28.2
复制代码
3)查看集群状态
master 上查看集群状态(NotReady 不影响)
  1. # 获取所有节点信息
  2. [root@k8s-master ~]# kubectl get node
  3. NAME         STATUS     ROLES           AGE   VERSION
  4. k8s-master   NotReady   control-plane   24h   v1.28.2
  5. node01       NotReady   <none>         68s   v1.28.2
复制代码
到此建议打快照
6、Calico 组件安装

1)切换 git 分⽀
  1. [root@k8s-master ~]# cd k8s-ha-install/
  2. [root@k8s-master k8s-ha-install]# ls
  3. calico.yaml krm.yaml LICENSE metrics-server-0.3.7 metrics-server-3.6.1
  4. README.md
  5. [root@k8s-master k8s-ha-install]# git checkout manual-installation-v1.28.x
  6. 分支 manual-installation-v1.28.x 设置为跟踪来自 origin 的远程分支 manualinstallation-v1.28.x。
  7. 切换到一个新分支
  8. 'manual-installation-v1.28.x'
复制代码
2)修改 Pod ⽹段
  1. [root@k8s-master k8s-ha-install]# cd calico/
  2. # 获取已定义的Pod⽹段
  3. [root@k8s-master calico]# POD_SUBNET=`cat /etc/kubernetes/manifests/kubecontroller-manager.yaml
  4. | grep cluster-cidr= | awk -F= '{print $NF}'`
  5. [root@k8s-master calico]# echo $POD_SUBNET
  6. 172.16.0.0/16
  7. # 修改calico.yml⽂件中的pod⽹段
  8. [root@k8s-master calico]# sed -i "s#POD_CIDR#${POD_SUBNET}#g" calico.yaml
  9. # 创建calico的pod
  10. [root@k8s-master calico]# kubectl apply -f calico.yaml
复制代码

3)查看容器和节点状态
  1. [root@k8s-master calico]# kubectl get po -n kube-system
复制代码

  1. [root@k8s-master calico]# kubectl get node
  2. NAME         STATUS     ROLES           AGE   VERSION
  3. k8s-master   NotReady   control-plane   24h   v1.28.2
  4. node01       NotReady   <none>         20m   v1.28.2
  5. [root@k8s-master calico]# kubectl describe po -n kube-system calico
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表