小秦哥 发表于 2022-6-21 13:58:32

Kubernetes(k8s)安装以及搭建k8s-Dashboard详解

目录

[*]一、前期准备

[*]1)前提条件
[*]2)机器信息
[*]3)确保每个节点上 MAC 地址和 product_uuid 的唯一性
[*]4)允许 iptables 检查桥接流量(可选)
[*]5)检查所需端口

[*]二、安装 runtime
[*]三、安装 kubeadm、kubelet 和 kubectl

[*]1)配置hosts
[*]2)关闭防火墙
[*]3)关闭swap
[*]4)将 SELinux 设置为 disabled模式(相当于将其禁用)
[*]5)配置yum源,这里配置阿里云的源
[*]6)开始安装kubeadm,kubelet和kubectl
[*]7)使用 kubeadm 创建集群(master节点)
[*]8)安装Pod网络插件(CNI:Container Network Interface)(master)
[*]9)Node节点加入集群

[*]四、清理
[*]五、搭建K8S Dashboard

一、前期准备

1)前提条件


[*]三台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 - - Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
[*]每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
[*]2 CPU 核或更多
[*]集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
[*]节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
[*]开启机器上的某些端口。
[*]禁用交换分区。为了保证 kubelet 正常工作,必须 禁用交换分区。
2)机器信息

机器类型操作系统网卡IP节点类型VMware虚拟机centos8ens33192.168.0.113k8s-masterVMware虚拟机centos8ens33192.168.0.114k8s-node1VMware虚拟机centos8ens33192.168.0.115k8s-node2修改主机名
# 在192.168.0.113执行
$ hostnamectl set-hostname k8s-master
# 在192.168.0.114执行
$ hostnamectl set-hostname k8s-node1
# 在192.168.0.115执行
$ hostnamectl set-hostname k8s-node2时间同步
$ yum install chrony -y
$ systemctl start chronyd
$ systemctl enable chronyd
$ chronyc sources3)确保每个节点上 MAC 地址和 product_uuid 的唯一性


[*]你可以使用命令 ip link来获取网络接口的 MAC 地址
[*]可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验
一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装 失败。
4)允许 iptables 检查桥接流量(可选)


[*]确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter。
[*]为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。所有节点都执行以下命令:
$ cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

$ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 手动加载所有的配置文件
$ sudo sysctl --systemhttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220152936-1377304438.png
2)关闭防火墙

# 安装yum-config-manager配置工具
$ yum -y install yum-utils
# 设置yum源
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce版本
$ sudo yum install -y docker-ce
# 启动
$ sudo systemctl start docker
# 开机自启
$ sudo systemctl enable docker
# 查看版本号
$ sudo docker --version
# 查看版本具体信息
$ sudo docker version

# Docker镜像源设置
# 修改文件 /etc/docker/daemon.json,没有这个文件就创建
# 添加以下内容后,重启docker服务:
{
   "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
$ sudo systemctl restart docker3)关闭swap

kubelet 在 1.8 版本以后强制要求 swap 必须关闭。要不然kubelet 无法正常启动
$ echo "192.168.0.113 k8s-master" >> /etc/hosts
$ echo "192.168.0.114 k8s-node1" >> /etc/hosts
$ echo "192.168.0.115 k8s-node2" >> /etc/hosts
# 查看
$ cat /etc/hosts4)将 SELinux 设置为 disabled模式(相当于将其禁用)

$ systemctl stop firewalld
$ systemctl disable firewalld5)配置yum源,这里配置阿里云的源

# 临时关闭;关闭swap主要是为了性能考虑
$ swapoff -a
# 可以通过这个命令查看swap是否关闭了
$ free
# 永久关闭      
$ sed -ri 's/.*swap.*/#&/' /etc/fstab如果不加入环境变量,会出现如下报错:
https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220357342-685464858.png
8)安装Pod网络插件(CNI:Container Network Interface)(master)

你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。
# 临时关闭
$ sudo setenforce 0
# 永久禁用
$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config如果上面安装失败,则下载我百度里的,离线安装
链接:https://pan.baidu.com/s/1HB9xuO3bssAW7v5HzpXkeQ
提取码:8888
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF

name=k8s
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOFhttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220412887-804270255.png
查看集群信息
$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
$ sudo systemctl enable --now kubelet

# 查看状态
$ systemctl status kubelethttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220426261-1314301381.png
9)Node节点加入集群

如果没有令牌,可以通过在控制平面节点上运行以下命令来获取令牌:
$ kubectl version
$ yum info kubeadmhttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220438220-1901598941.png
默认情况下,令牌会在24小时后过期。如果要在当前令牌过期后将节点加入集群, 则可以通过在控制平面节点上运行以下命令来创建新令牌:
$ kubeadm token create# 再查看$ kubectl version
$ yum info kubeadmhttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220450916-1968554637.png
如果你没有 --discovery-token-ca-cert-hash 的值,则可以通过在控制平面节点上执行以下命令链来获取它:
# 手动拉取默认版本的coredns镜像
$ docker pullregistry.aliyuncs.com/google_containers/coredns    https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220501771-1083022440.png
如果执行kubeadm init时没有记录下加入集群的命令,可以通过以下命令重新创建(推荐)一般不用上面的分别获取token和ca-cert-hash方式,执行以下命令一气呵成:
$ docker imageshttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220513614-169836968.png
以下命令在node节点执行**
# 查看集群信息$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
$ sudo systemctl enable --now kubelet

# 查看状态
$ systemctl status kubelet【问题】这里可能会报错 localhost:10248拒绝访问,这个无解,重装系统解决
https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220525946-1984143571.png
【解决】
重置节点信息
$ kubeadm init \
--apiserver-advertise-address=192.168.0.113 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16需要将master节点的 /etc/kubernetes/admin.conf复制到node节点的相同位置
$ tail /var/log/messageshttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220537744-1481695214.png
执行下面的代码加入环境变量
$ systemctl daemon-reload
$ systemctl restart kubelet修改docker的cgroup driver,修改或创建/etc/docker/daemon.json,加入下述内容:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}重新加载
$ cat /etc/docker/daemon.json
$ systemctl daemon-reload
$ systemctl restart docker
# 查看docker的cgroup driver
$ docker info | grep Cgrouphttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220547736-460969714.png
$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
$ sudo systemctl enable --now kubelet

# 查看状态
$ systemctl status kubelethttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220557842-1675498656.png
安装flannel网络插件,采用离线安装,kube-flanel.yml文件上面有
$ kubeadm init \
--apiserver-advertise-address=192.168.0.113 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16将node节点加入到集群中
$ docker images# --v=5:显示详细信息$ kubeadm join 192.168.0.113:6443 --token cgmxso.bfgou00m72tnbpz4 --discovery-token-ca-cert-hash sha256:b4792b0f3b54c8b8b71a4a484129b4e2acfe5014c37b1b18dbebbc0c8f69fc15 --v=5https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220612048-1261168854.png
另一个node节点同上操作
【问题】STATUS一直为NotReady
首先使用如下命令来看一下kube-system的 pod 状态:
# 临时生效(退出当前窗口重连环境变量失效)
$ export KUBECONFIG=/etc/kubernetes/admin.conf
# 永久生效(推荐)
$ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
$ source~/.bash_profilehttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220629666-1218100839.png
如上,可以看到 pod kube-flannel 的状态是ImagePullBackoff,意思是镜像拉取失败了,所以我们需要手动去拉取这个镜像。这里可以看到某些 pod 运行了两个副本是因为我有两个节点存在了。
也可以通过kubectl describe pod -n kube-system 来查看某个服务的详细情况,如果 pod 存在问题的话,你在使用该命令后在输出内容的最下面看到一个条目,如下:
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlhttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220639360-1096503918.png
【解决】手动拉取镜像
$ kubectl apply -f kube-flannel.yml
$ docker images修改完了之后过几分钟 k8s 会自动重试,等一下就可以发现不仅flannel正常了,其他的 pod 状态也都变成了Running,这时再看 node 状态就可以发现问题解决了:
https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220650730-687325787.png
四、清理

如果你在集群中使用了一次性服务器进行测试,则可以关闭这些服务器,而无需进一步清理。你可以使用 kubectl config delete-cluster 删除对集群的本地引用。
1)先将节点设置为维护模式(k8s-node1是节点名称)
$ kubectl get nodes2)在删除节点之前,请重置 kubeadm 安装的状态:
$ kubeadm init \
--apiserver-advertise-address=192.168.0.113 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/163)重置过程不会重置或清除 iptables 规则或 IPVS 表。如果你希望重置 iptables,则必须手动进行:
$ kubeadm token create
# 再查看
$ kubeadm token list4)如果要重置 IPVS 表,则必须运行以下命令:
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'5)现在删除节点:
$ kubeadm token create --print-join-command五、搭建K8S Dashboard

1)下载dashboard文件:
# 查看集群信息
$ kubectl get nodes如果地址不可用可以使用下面的地址下载
链接:https://pan.baidu.com/s/1-tEablkFTrMC-N9-8T7rrA
提取码:8888
安装
$ kubeadm reset验证,查看服务被分配到哪个节点上:$ scp /etc/kubernetes/admin.conf 192.168.0.114:/etc/kubernetes/
$ scp /etc/kubernetes/admin.conf 192.168.0.115:/etc/kubernetes/
$ scp /etc/kubernetes/admin.conf 192.168.0.114:/etc/kubernetes/
$ scp /etc/kubernetes/admin.conf 192.168.0.115:/etc/kubernetes/https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220702222-123953221.png
从上图可知,服务被分配到了k8s-node1,对外端口为nodePort:31080,配置文件里的。
谷歌浏览器访问不了,原因是部署UI的镜像中默认自带的证书是一个不可信任的证书,则先用火狐访问:https://nodeIp:nodePort
https://192.168.0.114:31080
https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220714996-1273842555.png
获取token测试
$ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
$ source~/.bash_profilehttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220732126-134742703.png
https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220740992-759366073.png
https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220748564-1888629842.png
解决谷歌浏览器不能访问的问题,通过生成新的证书永久解决
{
"exec-opts": ["native.cgroupdriver=systemd"]
}https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220800252-795473651.png
服务调度到k8s-node2节点上了,访问
https://192.168.0.115:31080
https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220812699-2099083695.png
现在Google浏览器也可以访问了
再获取token登录
$ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
$ source~/.bash_profilehttps://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220826704-1536264814.png
https://img2022.cnblogs.com/blog/1601821/202206/1601821-20220608220839347-763291044.png
以上就完整版K8s安装流程了~

来源:https://www.cnblogs.com/liugp/p/16357445.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Kubernetes(k8s)安装以及搭建k8s-Dashboard详解