CentOS7上安装Kubernetes1.18版本的master和node节点


Kubernetes需要最低双核CPU

1 安装kebeadm和相关工具

1.1 安装docker

# 1 下载阿里云镜像docker-ce.repo
wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 2 安装docker
# 2.1 安装阿里云yum仓库中的最新稳定版本
yum -y install docker-ce

# 2.2 安装指定版本的docker
# 卸载已安装的docker
yum remove docker-ce*
# 查询可用版本 
yum list docker-ce --showduplicates | sort -r
# 安装 19.03.9的版本(因下面安装的Kubernetes v1.18.20版本)
yum install -y docker-ce-19.03.9-3.el7

# 3 设置Docker镜像加速器
mkdir -p /etc/docker/
vim /etc/docker/daemon.json

# 插入以下内容:国内镜像地址:网易|ustc|中国区官方镜像(下载kubernetes需要用到)
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ]
}

# 4 启动Docker服务并设置开机自启动
systemctl start docker & systemctl enable docker

# 5 输出docker信息
docker info 
# 6 输出docker版本
docker version

1.2 修改服务器主机名

# master 主机名修改
hostnamectl set-hostname k8s-master
# node 主机名修改
hostnamectl set-hostname k8s-node

1.3 关闭防火墙

# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld

1.4 关闭seliunx

# 临时关闭
setenforce 0
# 永久关闭--修改配置文件关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 

1.5 关闭swap

# 临时关闭 
swapoff -a 
 
# 永久关闭--修改配置文件 
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# free命令查看
free -m

1.6 安装kubelet、kubeadm、kubectl

# 打开yum配置文件
vim /etc/yum.repos.d/kubernetes.repo
# 插入以下内容
[kubernetes]
name=Kubernetes Repository
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
# 安装kubelet、kubeadm、kubectl 最新的稳定版本
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# 安装kubelet、kubeadm、kubectl v1.18.20版本
yum install -y kubelet-1.18.20 kubeadm-1.18.20 kubectl-1.18.20
# 启动kubelet服务并设置开机自启动
systemctl enable kubelet && systemctl start kubelet

2 下载Kubernetes的相关镜像

安装v1.18.20版本的Kubernetes

# 创建Kubernetes的配置目录
mkdir -p /etc/kubernetes/
# 输出kubeadm init默认参数文件的内容并输出到 init.defalut.yaml文件中
kubeadm config print init-defaults > init.default.yaml

# 打开init-config.yaml文件,用来下载Kubernetes
cp init.default.yaml kubernetes1.18.20.master.yaml
vim kubernetes1.18.20.master.yaml

# 修改以下内容
localAPIEndpoint:
	advertiseAddress: 192.168.50.220  #修改为API Server的地址(本机IP地址)
nodeRegistration:
  name: k8s-master # 节点名称与hostname保持一致
imageRepository: registry.aliyuncs.com/google_containers # 修改为阿里云镜像仓库
kubernetesVersion: v1.18.20  # 修改为具体的版本
networking:
	serviceSubnet: 10.1.0.0/16   #修改Service的网络
	podSubnet: 10.2.0.0/16      #新增Pod的网络
# 下载Kubernetes
kubeadm config images pull --config=/etc/kubernetes/kubernetes1.18.20.master.yaml

3 运行kubeadm init 命令安装Master

3.1 删除原安装Kubernetes

# 清空kubeadm init 或者kubeadm join 对主机做的任何更改
kubeadm reset
# 删除配置
sudo rm -rf $HOME/.kube

3.2 安装 Master

# 安装 Kubernetes的Master
kubeadm init --config=/etc/kubernetes/kubernetes1.18.20.master.yaml

# kubectl 验证查看ConfigMap
kubectl get -n kube-system configmap   

3.3 安装时警告及处理

# 报错信息显示需要开放 6443 和 10250 这两个端口
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
# 需要关闭缓存
[ERROR Swap]: running with swap on is not supported. Please disable swap
# 关闭缓存
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 8080端口连接被拒绝;原因:kubernetes master没有与本机绑定,将Kubernetes设置添加到本机的环境变量中
The connection to the server localhost:8080 was refused - did you specify the right host or port?
# 添加到全局用户的环境变量中
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
# 生效
source /etc/profile

4 安装Node 加入集群

4.1 安装node并加入

# 按照1 安装kebeadm和相关工具 命令安装 docker、kubelet、kubeadm、kubectl

# 创建Kubernetes的配置目录
mkdir -p /etc/kubernetes/
# 输出kubeadm init默认参数文件的内容并输出到 init.defalut.yaml文件中
kubeadm config print init-defaults > init.default.yaml

# 打开init-config.yaml文件,用来下载Kubernetes
cp init.default.yaml kubernetes1.18.20.nodes.yaml
vim kubernetes1.18.20.nodes.yaml

# 插入以下内容
apiVersion: kubeadm.k8s.io/v1beta2
kind: JoinConfiguration           # node 节点
nodeRegistration:
  name: k8s-node        # 节点名称与hostname保持一致
kubernetesVersion: v1.18.20      # 修改为具体的版本
discovery:
  bootstrapToken:
    apiServerEndpoint: 192.168.50.220:6443   # Master节点的服务器地址
    token: abcdef.0123456789abcdef           # Master节点init后在最后一行打印显示
    unsafeSkipCAVerification: true
  tlsBootstrapToken: abcdef.0123456789abcdef # Master节点init后在最后一行打印显示

# node节点加入
kubeadm join --config=/etc/kubernetes/kubernetes1.18.20.nodes.yaml

4.2 警告及处理

# 缺少admin.conf 文件
Config not found: /etc/kubernetes/admin.conf
The connection to the server localhost:8080 was refused - did you specify the right host or port?
# 将master节点服务器上的/etc/kubernetes/admin.conf 文件上传到 node节点服务器上
scp /etc/kubernetes/admin.conf  用户@ip:/etc/kubernetes/
# 添加到全局用户的环境变量中
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
# 生效
source /etc/profile
# 10250端口已启动
[ERROR Port-10250]: Port 10250 is in use
# 通过netstat命令找到进程号,再通过kill命令杀掉即可
netstat -tpl|grep 10250
kill -9 进程号
# ca.crt配置文件已经存在
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
#重置kubeadm 即可 
kubeadm reset
# 报错信息显示:token ID "abcdef" 找不到
error execution phase preflight: couldn't validate the identity of the API Server: could not find a JWS signature in the cluster-info ConfigMap for token ID "abcdef"
# token过期或者 api server不可达

# token过期,在master节点更新token
kubeadm token generate
# 将生成的新token覆盖kubernetes1.18.20.nodes.yaml文件中的token并执行以下命令
kubeadm join --config=/etc/kubernetes/kubernetes1.18.20.nodes.yaml

# api server 不可达,关闭firewalld和selinux
systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 

5 验证Kubernetes集群

# 查看所有节点
kubectl get nodes
# 验证Kubernetes集群的相关Pod是否正常 
kubectl get pods --all-namespaces
posted on 2022-04-22 14:24  cxbks  阅读(112)  评论(0)    收藏  举报