1 操作系统版本要求

1.1 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令1.2 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)

1.2 CPU 核或更多

1.3 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)

1.4 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见:https://v1-23.docs.kubernetes.io/zh/docs/setup/production-env...

1.5 开启机器上的某些端口。请参见:https://v1-23.docs.kubernetes.io/zh/docs/setup/production-env...

1.6 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。

2 安装必要的运行程序

2.1 安装必要组建

apt install -y conntrack  ebtables

2.2 永久修改主机名

hostnamectl set-hostname k8s-master

2.3 禁用swap

2.3.1 临时修改,重启后恢复

swapoff -a

2.3.2 永久修改

编辑配置文件 /etc/fstab 将swap进行注释

2.3.3 查看是否生效

使用free -g命令,Swap 显示都为0表示修改成功了

2.4 安装docker

apt install -y docker.io

2.4.1修改/etc/docker/daemon.json

{
    "registry-mirrors":[
        "https://docker.mirrors.ustc.edu.cn",
        "https://hub-mirror.c.163.com"
    ],
    "exec-opts":[
        "native.cgroupdriver=systemd"
    ]
}

2.4.3重启docker

systemctl daemon-reload
systemctl restart docker

2.5 安装CNI插件

root@k8s-master:~# sudo mkdir -p /opt/cni/bin
root@k8s-master:~# curl -L https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgz | sudo tar -C /opt/cni/bin -xz

2.5 安装 crictl(kubeadm/kubelet 容器运行时接口(CRI)所需)

root@k8s-master:~# curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.22.0/crictl-v1.22.0-linux-amd64.tar.gz" | sudo tar -C /usr/local/bin -xz

2.6 安装 kubeadm、kubelet、kubectl

root@k8s-master:~# cd /usr/local/bin && curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/v1.23.9/bin/linux/amd64/{kubeadm,kubelet,kubectl}
root@k8s-master:~# chmod +x kubeadm kubectl kubelet

2.7 添加kubelet系统服务

root@k8s-master:~# curl -sSL "https://raw.githubusercontent.com/kubernetes/release/v0.4.0/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:/usr/local/bin:g" | sudo tee /etc/systemd/system/kubelet.service

root@k8s-master:~# sudo mkdir -p /etc/systemd/system/kubelet.service.d

root@k8s-master:~# curl -sSL "https://raw.githubusercontent.com/kubernetes/release/v0.4.0/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:/usr/local/bin:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

2.7.1启动kubelet系统服务

root@k8s-master:~# systemctl enable kubelet

2.8 安装成功的标识

分别执行kubeadm versionkubectl version,systemctl status kubelet命令

3 初始化一个master集群

root@k8s-master:~# kubeadm init \
--apiserver-advertise-address=0.0.0.0 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version 1.23.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all

3.1 加载配置文件启动一个集群

root@k8s-master:~# kubeadm init --config  kube-init.yaml

kube-init.yaml

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 0.0.0.0
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: k8s-master
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
    #etcd访问地址
    extraArgs:
     listen-client-urls: "https://127.0.0.1:2379,https://127.0.0.1:2379"
     listen-peer-urls: "https://127.0.0.1:2380"
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.23.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}

3.2 配置文件写入到$HOME下

root@k8s-master:~# mkdir -p $HOME/.kube

root@k8s-master:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

root@k8s-master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

root@k8s-master:~# export KUBECONFIG=/etc/kubernetes/admin.conf

3.3 安装网络组建

root@k8s-master:~# kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

3.4 检查master节点是否安装成功

root@k8s-master:~# kubectl get node 
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   13m   v1.23.9

zhiqiang
243 声望14 粉丝