1 系统准备

操作系统:

  • Kubernetes 支持多种Linux发行版,包括但不限于 CentOS、Ubuntu、RHEL等。通常建议使用稳定版本,并且是64位系统。我这里使用的是CentOS 8.1版本
cat /etc/centos-release
# CentOS Linux release 8.1.1911 (Core)

 硬件配置:

  • 内存(RAM):每台机器至少需要2GB或更多,具体需求根据集群规模和应用程序负载来定。
  • CPU核心数:每个节点至少需要2个物理核心或虚拟核心。
  • 存储空间:硬盘空间一般建议在30GB以上,以确保有足够的空间用于容器镜像、日志和其他数据存储。
  • 网络连接:所有节点之间必须能够通过网络相互连接,无论是内部私有网络还是公网连接。

配置网络

vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
# 添加以下内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=039303a5-c70d-4973-8c91-97eaa071c23d
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.122.21
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
DNS1=223.5.5.5

添加阿里源

rm -rfv /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

配置主机名

vim /etc/hosts
# 删除原内容填写以下内容
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.21 master01.paas.com master01

关闭swap,注释swap分区

swapoff -a

vim /etc/fstab
# 删除原内容填写以下内容
#
# /etc/fstab
# Created by anaconda on Tue Mar 31 22:44:34 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#

/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=5fecb240-379b-4331-ba04-f41338e81a6e /boot                   ext4    defaults        1 2
/dev/mapper/cl-home     /home                   xfs     defaults        0 0
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0

 配置内核参数,将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system

2 安装常用包

yum install vim bash-completion net-tools gcc -y

 3 使用aliyun源安装docker-ce

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum -y install docker-ce

 安装docker-ce如果出现以下错

CentOS-8 - Base - mirrors.aliyun.com                                                                               14 kB/s | 3.8 kB     00:00
CentOS-8 - Extras - mirrors.aliyun.com                                                                            6.4 kB/s | 1.5 kB     00:00
CentOS-8 - AppStream - mirrors.aliyun.com                                                                          16 kB/s | 4.3 kB     00:00
Docker CE Stable - x86_64                                                                                          40 kB/s |  22 kB     00:00
Error:
 Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
  - package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.el7.x86_64 is excluded
  - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

 解决办法

wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

yum install containerd.io-1.2.6-3.3.el7.x86_64.rpm

然后再安装docker-ce即可成功
添加aliyundocker仓库加速器

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload

systemctl restart docker

 4 安装kubectl、kubelet、kubeadm

 添加阿里kubernetes源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

 安装,注意:我使用的是1.13.3版本

yum install -y kubelet-1.13.3 kubeadm-1.13.3 kubectl-1.13.3

5 初始化k8s集群

注意:版本v1.13.3

kubeadm init \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.13.3 \--pod-network-cidr=10.244.0.0/16

初始化成功以后,根据提示执行以下命令:

需牢记You can now join any number of machines by running the following on each node
as root:以下的token,如果需要多节点部署k8s,需要用到token

 6 初始化pod网络

安装容器网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

7 单机部署集群

默认情况下,Kubernetes(k8s)集群的 Master 节点通常不会被配置为工作节点,也就是说,不会调度普通用户的应用程序Pod在其上运行。为了确保Master节点资源主要用于控制平面组件,并且避免因应用程序Pod导致的安全风险或性能问题,Kubernetes 通常会在 Master 节点上添加特定的污点(Taints),从而阻止调度器将Pod调度到该节点上。

具体来说,使用 kubeadm 初始化的 Kubernetes 集群会自动给 Master 节点加上一个名为 node-role.kubernetes.io/master:NoSchedule 的污点(在较新版本中可能是 node-role.kubernetes.io/control-plane:NoSchedule 或类似的形式),这意味着没有明确容忍这个污点(Toleration)的Pod是不会被调度到 Master 节点上的。

如果确实需要让 Pod 在 Master 节点上运行,有两种方法可以实现:

  1. 移除 Master 节点上的污点: 生产环境中不推荐这样做,因为这可能会导致控制平面受到影响。

    kubectl taint nodes <master-node-name> node-role.kubernetes.io/master:NoSchedule-
  2. 配置 Pod 容忍相关污点: 在应用的 Deployment、StatefulSet 等资源定义中,添加容忍(toleration)以允许 Pod 运行在带有特定污点的节点上。

    spec:
      tolerations:
      - key: "node-role.kubernetes.io/master"
        effect: "NoSchedule"

不过,在大多数情况下,最佳实践仍然是保持 Master 节点专注于运行控制平面服务,并避免在其上部署任何非关键的应用程序工作负载。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐