1. 环境与介质
操作系统:centos7 Minimal install (CentOS-7-x86_64-DVD-2003.iso)
内核版本:3.10.0-1127.el7.x86_64
kubernetes版本:1.20.2
docker版本:20.10.7
安装用户:root
网络状态:联网
机器:master(主节点) node01(从节点)
2. 环境准备
2.1 配置host文件(全部节点,可跳过)
vi /etc/hosts 添加host与ip映射相关配置
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.101.40.201 master
10.101.40.202 node01
2.2 关闭防火墙(全部节点)
不关闭防火墙的情况下就需要对kubernetes节点间通信的端口比较清楚,然后根据端口来配置网络开放策略,通常情况下内网环境关闭防火墙即可
systemctl stop firewalld
systemctl disable firewalld
2.3 禁止selinux(全部节点)
#临时关闭,重启失效
setenforce 0
#永久禁用
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#验证
getenforce
#输出Permissive即可
2.4 禁止交换分区(全部节点)
#临时禁用,重启失效
swapoff -a
#永久禁用
vi /etc/fstab
#将下面这行用#号注释
#/dev/mapper/centos-swap swap swap defaults 0 0
执行mount命令检查防止编辑fstab文件出错导致机器无法重启,该命令无输出即表示正常
[root@master ~]# mount -a
[root@master ~]#
验证,以下命令无输出表示交换分区已关闭
[root@master ~]# swapon -s
[root@master ~]#
2.5 安装docker(全部节点)
安装相关依赖
yum remove docker docker-client docker-client-latest docker-common docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
修改docker配置文件
mkdir /etc/docker
#修改docker配置文件(没有则创建),添加如下内容 vi /etc/docker/daemon.json
{
"exec-opts":["native-cgroupdriver=systemd"],
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
启用docker服务
#启用docker
systemctl enable docker
systemctl restart docker
通过docker ps命令验证docker安装情况,无报错即可
[root@node01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2.6 配置阿里yum源(所有节点)
创建yum仓库文件,添加如下内容 vi /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
2.7 同步服务器时间
这里也可以选择使用ntp时间服务来做时间同步,如果服务器时差过大,容易导致章节4.6.1出现的问题
date -s 17:23:10
hwclock -w
3. 通过kubeadmin安装kubernetes(官方推荐)
3.1 安装kubernetes相关依赖
这里默认拉取的是最新版本,也可以指定版本
yum install -y kubectl kubeadmn kubelet
systemctl enable kubelet
3.2 配置kubernetes集群配置文件(主节点执行)
在主节点生成一份默认配置文件
kubeadm config print init-defaults >> init.yaml
修改配置文件 vi init.yaml ,注意修改注释说明的配置
advertiseAddress :填写主节点的ip
imageRepository: 用阿里的镜像仓库代替默认的国外的仓库
podSubnet :pod网段设置
其他配置项可以根据需要进行修改
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.101.40.201 #这里填写主节点的ip
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: node
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {
}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers #这里使用阿里的镜像仓库,默认的仓库是国外的
kind: ClusterConfiguration
kubernetesVersion: 1.21.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 #新增项,设置pod的网络
scheduler: {
}
3.3 拉取kubernetes所需镜像
列出本次安装需要用到的镜像
[root@master ~]# kubeadm config images list --config init.yaml
registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.0
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.0
registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.0
registry.aliyuncs.com/google_containers/kube-proxy:v1.21.0
registry.aliyuncs.com/google_containers/pause:3.4.1
registry.aliyuncs.com/google_containers/etcd:3.4.13-0
registry.aliyuncs.com/google_containers/coredns:v1.8.0
拉取镜像
[root@master ~]# kubeadm config images pull --config init.yaml
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.21.0
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.4.1
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.4.13-0
failed to pull image "registry.aliyuncs.com/google_containers/coredns:v1.8.0": output: Error response from daemon: manifest for registry.aliyuncs.com/google_containers/coredns:v1.8.0 not found: manifest unknown: manifest unknown
, error: exit status 1
To see the stack trace of this error execute with --v=5 or higher
这里可以看到 "registry.aliyuncs.com/google_containers/coredns:v1.8.0"镜像没有找到,可能是阿里镜像仓库还没有收录该镜像,可以去docker hub上拉取一个重新打tag,其他类似情况都可以这样处理
docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:v1.8.0
这样本地镜像就齐全了,最好在其他机器上也预先准备好镜像,其他机器可以通过如下命令拉取,如果存在镜像找不到的情况也可以使用上文的方式打tag,注意kubernetes-version版本保持一致,这里用的1.21.0
[root@node01 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.21.0
3.4 通过配置文件初始化集群(主节点执行)
kubeadm init --config init.yaml
[root@master ~]# kubeadm init --config init.yaml
[init] Using Kubernetes version: v1.21.0
[preflight] Running pre-flight checks
[WARNING Service-Docker]: docker service is not enabled, please run 'systemctl enable docker.service'