4.1 k8s完整安装(一)

264

这是我参与2022首次更文挑战的第30天,活动详情查看:2022首次更文挑战

前言: 采坑

k8s有3种安装方式,如下所示:

  • minikube:这是一个k8s集群模拟器,只有一个节点的集群,只为了测试使用,master和node都在一台机器上
  • 直接使用带有容器功能的云平台安装:这个可以采用阿里云或者腾讯云服务器带有容器功能的,这个的优点就是可视化搭建,步骤简单,完全不用自己去安装了,缺点是收费。
  • 裸机安装:至少有两台服务器,一个主节点,一个工作节点。需要在即安装k8s的组件。配置稍微麻烦点。

我因为是自己学习使用,所以采用裸机安装。全程自己操作,我是通过在本机安装虚拟机,安装了3台虚拟机,我的环境是mac笔记本。如果想要参考mac笔记本安装虚拟机,可以看这篇文章:www.cnblogs.com/ITPower/p/1…


一. 环境准备

操作系统:macOS 笔记本

虚拟机: Parallels

网络环境搭建:参考文章- www.cnblogs.com/ITPower/p/1…

二. 集群搭建

1、搭建环境需要的组件

1) master节点需要的组件

  • docker
  • kubectl:集群命令行交互工具
  • kubeadm:集群初始化工具

2)node节点需要的组件

  • docker
  • kubelet:管理pod的容器,确保他们健康稳定的运行
  • Kube-proxy: 网络代理,负责网络相关工作

2、开始搭建

第一步:设置每个节点的主机名

sudo hostnamectl set-hostname master
sudo hostnamectl set-hostname node1
sudo hostnamectl set-hostname node2

这条命令会删除/etc/hostname文件中的主机名,然后替换为新的主机名。系统会更新/etc/hosts文件.

然后输入名称查询是否已经变更了主机名

hostname

第二步:添加ip和主机名的映射关系

获取服务器的ip,并在宿主机访问. 我的三台虚拟机的ip是

10.211.55.200
10.211.55.201
10.211.55.202

将ip和主机名的映射关系添加到3台服务器中,执行命令

sudo vim /etc/hosts

然后将下列代码拷贝进去

10.211.55.200 master
10.211.55.201 node1
10.211.55.202 node2

全部都配置好了以后,在三台服务ping一下,看看是否能访问通

ping master
ping node1
ping node2

能ping通就说明配置没问题。

第三步:关闭所有节点的SELINUX

关闭所有节点的SELINUX, Redhat使用了SELinux来增强安全

setenforce 0  
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

上面两个命令的含义:第一个是临时关闭防火墙,不需要重启服务;第二个是永久关闭防火墙,需要重启。

验证防火墙是否关闭成功

getenforce  或者 sestatus

SELINUX相关命令科普

sestatus # 查询SELINUX的状态

关闭selinux的方法有两种:临时关闭和永久关闭。

  1. 临时关闭防火墙

    临时关闭在重启后会失效。

    临时关闭命令:

    setenforce 0
    

    查看是否关闭成功:

    getenforce
    

    临时关闭报错 setenforce: setenforce() failed ,问题是权限不够,我们需要管理员权限才可以。要先获取root权限

    su  - root 
    setenforce  0
    
  2. 永久关闭防火墙

    编辑配置文件 /etc/selinux/config 。需要重启才可以生效

    sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
    

    我们常用的方法是,先配置临时生效,再更改配置文件。这样就算服务器重启了,selinux也还是关闭的。

### 第四步:关闭所有节点的防火墙和swapoff

systemctl stop firewalld
systemctl disable firewalld

验证防火墙的状态

systemctl status firewalld

关闭swapoff

swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

第五步:添加k8s安装源和docker安装源

添加k8s安装源

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

添加docker安装源

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

第六步:安装k8s组件

yum install -y kubelet kubeadm kubectl docker-ce

三台服务器都安装。

第七步:启动kubelet、docker,并设置开机启动

systemctl enable kubelet
systemctl start kubelet
  
systemctl enable docker
systemctl start docker

Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成以下使命: 1.监视分配给该Node节点的pods 2.挂载pod所需要的volumes 3.下载pod的secret 4.通过docker/rkt来运行pod中的容器 5.周期的执行pod中为容器定义的liveness探针 6.上报pod的状态给系统的其他组件 7.上报Node的状态

一定要检查kubelet的状态是否正常

systemctl status kubelet

image

这是启动成功的状态。

我在启动kubelet这里遇到的麻烦,总是提示启动失败。各种排查都没有找到原因。最后卸载重新安装了,记录一下卸载流程

第一步:我使用的yum install安装的,所以卸载使用 yum remove

yum -y remove   //-y表示又询问都是yes

第二步:查看kubelet包在linux中是否存在

yum list kubelet

我们看到包还在,原因是软件卸载了,并没有删除软件包

第三步:检查删除的状态

systemctl status kubelet

状态提示:

Warning: kubelet.service changed on disk. Run 'systemctl daemon-reload' to reload units.

第四步:验证删除成功

执行systemctl daemon-reload

systemctl daemon-reload

执行完以后在查询状态

systemctl status kubelet

Unit kubelet.service could not be found.

systemctl status kubelet

状态返回异常

image

然后看日志,看看日志包的什么错?

journalctl -xefu kubelet

image

日志说的很清楚,没有找到/var/lib/kubelet/config.yaml文件

这个问题最后我卸载了kubelet,然后重新装了一遍就好了。

\