K8S-K8S 环境搭建

新手搭建K8S 

环境准备 

通过vmware 准备系统为centos7 的虚机三台 。(一台也可以,后面在克隆虚机也可以)安装vmware 虚机过程就不写了比较基础。

准备环境配置网络   我选择桥接模式。配置静态ip ,静态ip 可以ping通外网。(桥接模式下dhcp 获取的地址,我们取和他同一网段的地址配置给我们虚机就好了,确保取地址是未被使用的可以通过ping 检查)

我准备三台vm 的地址规划

master   192.168.0.50

node1    192.168.0.51  

node2    192.168.0.52

 

吸引准备好后 对环境的设置

修改主机名

hostnamectl set-hostname    +主机名

配置主机网络

[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33-1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.0.50
PREFIX=24
GATEWAY=192.168.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b1cac983-ca12-4acb-8e88-638e9ecda874
DEVICE=ens33
ONBOOT=yes

 

设置域名解析

[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.50 master
192.168.0.51 node1
192.168.0.52 node2

 

手动修改 selinux 配置文件,设置永久关闭(需要重启动机器)

vi /etc/selinux/config

SELINUX=enforcing改为SELINUX=disabled

关闭iptables

systemctl stop iptables

systemctl disable iptables

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

 

检查server 是否可以ping 通外网  可以通过ping  www.baidu.com 

 

 

准备安装docker 

添加aliyun 的yum 源

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

检查yum 源,此时出现的出来我们本机的yum 源 应该会多一个docker 的yum 源

yum makecache

 

安装docker

yum install -y docker-ce 

 

启动docker 服务

systemctl start docker

systemctl enable docker

 

验证docker 是否ok,结果如下

docker run hello-world

 

如果提示docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 2, stdout: , stderr: fatal error: runtime: out of memory

是虚机的内存不够,扩内存可以解决此问题我虚机是给了1G 扩至2G解决此问题

 

 

 

docker 是安装K8S 的前提,确保docker 的可用性我们在安装K8S 

网络使用的goofle 的K8S yum 源国内用不了,我们需要切换成阿里的yum 源

在 /etc/yum.repos.d/ 目录下生产一个K8S 的yum 源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

 

执行yum makecache 检查

 

 

k8s 所需的组件: kubelet  kubeadm  kubectl

Kubelet   是运行在所有cluster  节点上的负责启动pod 和容器

Kubeadm   用于初始化cluster

Kubectl   K8S 的命令行工具,用于管理和部署应用,负责查看、删除、创建 和更新组件

 

安装K8S 需要的组件  (所有节点上安装)

 

yum install -y kubelet kubeadm kubectl

 

可以使用kubectl version kubelet --version kubeadm version验证是否安装成功 

 

如果做到这里如果大家使用的是一台虚机,现在可以将虚机克隆 需要几个node 节点克隆几个就可以了 然后修改ip   hostname 即可

 

master 节点的操作

初始化master 节点

 kubeadm init --pod-network-cidr=192.168.10.0/16  --apiserver-advertise-address=192.168.0.50  

 

由于国内网络原因 在获取镜像会超时会提示如下报错

 

 

在根据网络上添加阿里云的镜像时虽然会减少镜像下载报错但是还是有问题

 

 

 

 

 

 

我们使用以下方法来彻底解决此问题

原文链接https://blog.csdn.net/weixin_43168190/article/details/107227626

在初始化master 时候会有提示让我们是使用 'kubeadm config images pull' 来提前知道image 的版本

 

 

 

我们直接从DockerHub的其它仓库拉取

https://hub.docker.com/search?q=kube-proxy&type=image 

 

 

 

选取一个访问量最多的仓库来使用

编写下载镜像的脚本

[root@master ~]# cat pull_k8s_images.sh

set -o errexit

set -o nounset

set -o pipefail

 

##这里定义版本,按照kubeadm config images pull 获取到的版本填写对应的版本号

 

KUBE_VERSION=v1.21.2

KUBE_PAUSE_VERSION=3.4.1

ETCD_VERSION=3.4.13-0

DNS_VERSION=1.8.0

 

##这是原始仓库名,最后需要改名成这个

GCR_URL=k8s.gcr.io

 

##这里就是写你要使用的仓库

DOCKERHUB_URL=k8smx

 

##这里是镜像列表,新版本要把coredns改成coredns/coredns

images=(

kube-proxy:${KUBE_VERSION}

kube-scheduler:${KUBE_VERSION}

kube-controller-manager:${KUBE_VERSION}

kube-apiserver:${KUBE_VERSION}

pause:${KUBE_PAUSE_VERSION}

etcd:${ETCD_VERSION}

coredns/coredns:${DNS_VERSION}

)

 

##这里是拉取和改名的循环语句

for imageName in ${images[@]} ; do

  docker pull $DOCKERHUB_URL/$imageName

  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName

  docker rmi $DOCKERHUB_URL/$imageName

done

 

 

 

执行脚本就可以下载对应的镜像并给镜像改成对应的名称

bash pull_k8s_images.sh

 

 

 

 

这里我们提示我们仓库coredns镜像下载失败

我们可以仓库搜索关键字来寻找我们所需对应的版本image

 

 

docker pull coredns/coredns:1.8.0

 

 

给镜像改名,因为我们需要的镜像信息是k8s.gcr.io/coredns/coredns:v1.8.0

docker tag coredns/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0

 

 

 

 

master 节点上执行初始化

 

 

最总结果记录这些信息

 

 

根据最总结果的提示执行相关命令

 

 

查看相关节点的pod 信息  (pending 是正常的 正在启动搭建pod 最后会变成running 状态)

kubectl get pod -n kube-system

 

查看node 节点列表信息当前状态是NotReady

 

 

 

节点列表中状态为NotReady,是因为You should now deploy a pod network to the cluster,也就是需要在集群中部署一个pod network,上面的运行结果里写到:

 

 

登录到https://kubernetes.io/docs/concepts/cluster-administration/addons/ 选择flannel 网络

 

 

 

flannel 中的目录下进入documentation 目录选择kube-flannel.yml点击raw 会获取到下载flannel.yml 文件的路径  (如果跳转过去没有信息显示没有关系复制http 的路径就可以了)

https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

 

 

使用wget 下载flannel文件      失败原因是我们虚机无法解析到这个域名ip

wget url --no-check-certificate https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

 

 

 

我需要知道这个raw.githubusercontent.com 对应的ip 地址

搜素nslookup 使用工具查找

 

 

 

 

 

添加域名解析

 

 

再次wget 下载 wget url --no-check-certificate https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

 

 

加载文件

kubectl apply -f kube-flannel.yml

 

 

在检查node 状态已经是ready 状态了

 

 

Node 节点的部署

Node1 执行kubeadm join 192.168.0.50:6443 --token mp4ghu.k3wx612pnxtj27ys \

>         --discovery-token-ca-cert-hash sha256:cbf3766f4563a35ebc4c0e85e2629abd7b09615462cc2164932365512cf2c56e  (之前初始化成功狗有此命令)

 

 

 

Node2 同上

 

master 检查新加入的node 节点

kubectl get nodes

 

 

部署参照了https://blog.csdn.net/weixin_43168190/article/details/107227550?spm=1001.2014.3001.5501

 

 

目前node1 node2 节点显示状态时NotReady 很明显有问题。

检查pod 信息发现flannel pod 节点异常

 

kubectl describe pod kube-flannel-ds-5rdhb -n kube-system

 

 

 

 

 

登录报错的node 节点查询log 

 

 

 

发现一直报网络的问题 还有提示我们下载k8s.gcr.io/pause:3.4.1失败 。

 

针对此问题我将环境中master 下载镜像脚本cp 过来将下载了所有的镜像。

 

正对network 问题,我将master 上的flanner image 保存下来另cp node节点上,在node 上重新加载。 

 

[root@master ~]#  docker save -o flannel.tar quay.io/coreos/flannel:v0.14.0

 

 

 

[root@master ~]# scp -r flannel.tar 192.168.0.52:/root/

 

flannel.tar                                                                                                                                                                  100%   66MB  99.6MB/s   00:00

 

 

 

[root@master ~]# scp -r flannel.tar 192.168.0.51:/root/

 

flannel.tar                                                                                                                                                                  100%   66MB  99.6MB/s   00:00

 

 

 

node 节点上执行docker load  -i flannel.tar

 

 

检查pod 信息,flannel 还是异常的

 

 

 

 

 

 

 

手动删除有问题的pod ,系统会自己重新在拉一个pod

kubectl delete pod kube-flannel-ds-p2ktn -n kube-system 

查看pod 返现问题已经被恢复 ,另一个node的同理。

 

 

 

 

 

 

检查node 状态都是ready

 

 

 

验证

下载nginx 的镜像

docker pull nginx 

 

 

 

 

 

创建一个pod

kubectl create deployment nginx --image=nginx 

 

 

 

 

 

将端口映射出去

kubectl expose deployment nginx --port=80 --type=NodePort

 

 

查询

kubectl get pods,svc

 

 

 

Pod 已经被运行在node2 节点上了,访问node2 ip+端口31830 可以访问nginx 界面

 

 

 

 

 

 

posted @ 2021-07-06 11:28  不懂技术得小杨  阅读(921)  评论(0编辑  收藏  举报