文章目录

前言一、环境准备1.1 安装要求1.2 准备环境

一、Docker环境1.1 Docker安装1.2 Docker 私有镜像仓库

二、K8S环境部署三、Docker常用命令四、K8S常用命令总结

前言

这篇文章讲解如何在centos搭建k8s环境,主要内容包括docker环境、docker私有镜像仓库搭建、k8s环境搭建三个部分。

一、环境准备

1.1 安装要求

部署k8s集群需要以下条件:

至少三台服务器,使用Centos7版本操作系统。内存大于等于2G,CPU大于等于2核,硬盘大于等于30G。需要下载镜像,因此必须能够访问外网。禁止swap分区。

1.2 准备环境

新安装的Centos7.9服务器需要配置静态网络: 打开网络配置文件:

cd /etc/sysconfig/network-scripts/

将以下内容添加进去,其中BOOTPROTO="static"表示静态网络,NAME和DEVICE填网卡驱动如果没有驱动需要手动安装即可;下面添加IP、子网掩码以及网关、DNS等内容。

TYPE="Ethernet"

PROXY_METHOD="none"

BROWSER_ONLY="no"

BOOTPROTO="static"

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="enp8s0"

DEVICE="enp8s0"

ONBOOT="yes"

IPADDR="192.168.1.180"

NETMASK="255.255.255.0"

GATEWAY="192.168.1.1"

DNS1="192.168.1.1"

由于之前已经有三台服务器主机名分别是master、node1、node2,因此本次安装三台服务器依次为node3、node4、node5。

角色名称IP主节点node3192.168.1.180子节点1node4192.168.1.181子节点2node5192.168.1.182

在新搭建的centos7.9操作系统上进行初始化:

#永久关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

#关闭swap

sed -ri 's/.*swap.*/#&/' /etc/fstab

# 三台服务器设置主机名

hostnamectl set-hostname

#三台服务器添加hosts

192.168.1.180 node3

192.168.1.181 node4

192.168.1.182 node5

一、Docker环境

Docker是一种较新的虚拟化方式,使用容器技术和宿主机共享硬件资源及操作系统,实现资源的动态分配,在彼此隔离的资源中运行应用程序。容器包含应用和其所有的依赖包,所有容器共享操作系统内核。使用Docker容器可保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。

1.1 Docker安装

k8s使用的容器为Docker,需首先安装Docker环境。

# 安装Docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

yum -y install docker-ce-18.06.1.ce-3.el7

# 检查Docker是否安装成功

docker --version

# 启动并设置Docker开机自启动

systemctl enable docker && systemctl start docker

# 添加Docker阿里云镜像仓库

cat > /etc/docker/daemon.json << EOF

{

"registry-mirrors": ["https://xigtegnc.mirror.aliyuncs.com"]

}

EOF

1.2 Docker 私有镜像仓库

Docker私有镜像仓库使用官方提供的registry完成

# 拉取registry镜像

docker pull registry

# 启动registry镜像,确定启动方式、是否重启、以及挂载目录、容器名字

docker run -itd -p 5000:5000 --restart always -v /opt/data/registry/:/var/lib/registry --name registry registry

# 验证是否搭建成功,浏览器打开网址:http://IP:port/v2/_catalog,成功说明镜像仓库搭建成功。

http://192.168.1.180:5000/v2/_catalog

# 将镜像发布到仓库中

# 1、docker tag命令给镜像打标签:docker tag imageName:version: IP:Port/tagedImageName:tagedVersion

docker tag nginx:latest 192.168.1.180:5000/mynginx:1.0

# 2、将镜像推送至仓库:docker push IP:Port/tagedImageName:tagedVersion

docker push 192.168.1.180:5000/mynginx:1.0

# 3、验证私有仓库是否已经存在该镜像:http://IP:port/v2/_catalog

http://192.168.1.180:5000/v2/_catalog

# 4、从私有仓库拉取镜像:docker pull IP:Port/tagedImageName:tagedVersion

从其他服务器发布镜像到Docker私有仓库时,报错:server gave HTTP response to HTTPS client,解决方法:在推送镜像的服务器配置insecure-registries

vim /etc/docker/daemon.json

# 添加insecure-registries

{

"registry-mirrors": ["https://xigtegnc.mirror.aliyuncs.com"],

"insecure-registries": ["192.168.1.180:5000","http://47.104.139.172:5000"]

}

从私有仓库拉取镜像时,如果Docker版本大于等于1.3.x,会有无法建立连接的报错。原因:Docker1.3.x之后,docker registry交互的默认方式为HTTPS,但是搭建的私有仓库默认使用HTTP服务,解决办法,在私有镜像所在服务器的docker.service 中添加上 insecure-registry:

vi /usr/lib/systemd/system/docker.service

# 找到ExecStart位置,在后面加上 --insecure-registry IP:Port

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.180:5000

# 重启服务

systemctl daemon-reload

systemctl restart docker

到此Docker环境,Docker私有镜像环境,以及向私有镜像推镜像,从私有镜像拉镜像内容已完成,下一步是k8s环境部署。

二、K8S环境部署

添加阿里云YUM软件源,加快下载速度。

# 添加阿里云YUM软件源

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

[kubernetes]

name=Kubernetes

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

enabled=1

gpgcheck=0

repo_gpgcheck=0

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

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

EOF

安装kubeadm、kubectl和kubelet

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

systemctl enable kubelet

集群初始化,在master执行

kubeadm init \

--apiserver-advertise-address=192.168.1.180 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version v1.18.0 \

--service-cidr=10.96.0.0/12 \

--pod-network-cidr=10.244.0.0/16

使用kubectl工具,在master执行

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 查看集群所有nodes

kubectl get nodes

向k8s集群中添加节点 在节点上执行以下命令,需复制上面master节点操作生成的真实命令。

kubeadm join 192.168.1.11:6443 --token esce21.q6hetwm8si29qxwn \

--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

部署CNI网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 查看是否部署成功

kubectl get pods -n kube-system

安装NFS

# 在选定的NFS服务器上执行

yum install nfs-utils -y

# 设置共享目录

/usr/project/data/nfs

# 将共享目录以读写权限暴露给需要使用该NFS的主机

vim /etc/exports

# 加入以下内容

/usr/project/data/nfs 192.168.1.0/24(rw,no_root_squash,no_all_squash,sync)

# 启动NFS服务

systemctl restart nfs

测试k8s集群 在k8s集群中创建一个nginx的pod进行校验

kubectl create deployment nginx --image=nginx

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

kubectl get pod,svc

# 可通过 http: //NodeIP:Port形式访问

三、Docker常用命令

# docker系统操作

# 启动、关闭、重启docker

systemctl start docker

systemctl stop docker

systemctl restart docker

# 设置docker开机自启动

systemctl enable docker

# 查看docker信息

docker version

docker info

# 镜像

# 从镜像仓库拉取镜像

docker pull IP:Port/imageName:imageTag

docker pull 192.168.1.180:5000/aengus/flow:v1.0

# 如果不使用IP:Port,默认从docker官方仓库拉取

docker pull nginx

# 查看所有镜像

docker images

# 删除镜像(不被任何容器使用方可删除)

docker rmi imageName

# 强制删除镜像

docker image rm imageName

# 使用Dockerfile制作镜像

docker build -t imageName:imageTag .

# 为镜像打标签

docker tag imageName:imageTag IP:Port/tagedImageName:tagedImageTag

# 向私有仓库推送镜像

docker push IP:Port/tagedImageName:tagedImageTag

# 容器

# 查看正在运行的容器

docker ps

# 查看所有容器

docker ps -a

# 进入容器(只能进入正在运行的容器,-it后面跟容器id)

docker exec -it b648cde72e9c /bin/bash

# 如果上条命令不能进入,可以尝试

docker exec -it b648cde72e9c /bin/sh

# 查看容器日志

docker logs -f containerId

# 启动容器

docker run -itd -p 5000:5000 --restart always -v /opt/data/registry/:/var/lib/registry --name registry registry

# -i: 以交互模式运行容器; -t: 为容器重新分配一个伪输入终端 -it通常连用。 -d:后台运行容器; -p:指定端口映射 宿主机端口:容器端口; --restart always:在容器退出时总是重启; -v:目录映射 宿主机目录:容器目录; --name:容器名字 最后的registry指定使用的镜像为registry

# 停止容器

docker stop containerId

# 删除容器

docker rm -f containerId

# 启动容器

docker start containerId

# 重启容器

docker restart containerId

# 删除异常停止的容器

docker rm `docker ps -a | grep Exited | awk '{print $1}'`

# 清除所有无容器使用的镜像和容器,包括容器临时停止。此命令会删除无用容器,再删除无用镜像,需慎用

docker system prune -a

四、K8S常用命令

# 查看命名空间

kubectl get ns

# 创建命名空间

kubectl create namespace heu

# kubectl语法

kubectl [command] [TYPE] [NAME] [flags]

# command:指定要在资源上执行的操作例如create、get、describe、delete、apply等; type:指定资源类型(pod、node、services、deployment); name: 指定资源名称; flags:可选参数,例如使用-n指定命名空间

# 以下命令均为操作某一命名空间下的资源

# 查看资源命令 get

# 查看指定命名空间下的pod

kubectl get pod -n heu

# 查看指定命名空间下的deployment

kubectl get deployment-n heu

# 查看指定命名空间下的service

kubectl get service -n heu

# 查看指定命名空间下的configMap

kubectl get configmap -n heu

# 查看指定命名空间下的secret

kubectl get secret -n heu

# 查看资源详细信息 describe

kubectl describe pod mynginx -n heu #查看pod的具体运行情况

kubectl describe deployment mynginx -n heu #了解deployment的详细信息

kubectl describe replicaset mynginx -n heu #了解replicaset的详细信息

kubectl describe secret mynginx -n heu #查看secret信息

kubectl describe configmap mynginx -n heu #查看configmap信息

# 通过配置文件部署资源

kubectl apply -f gateway.yaml

# 查看pod日志:

kubectl logs podId -n heu

# 进入容器

kubectl exec -it podId -n heu /bin/bash

# 缩放副本数量

kubectl scale deployment mynginx --replicas=2

# 删除资源 delete

kubectl delete podmynginx -n heu # 单纯删除pod可能无法删除,原因是deployment会维持重复数量

kubectl delete deployment mynginx -n heu

kubectl delete service mynginx -n heu

kubectl delete configmap mynginx -n heu

# 删除所有

kubectl delete deployment --all -n heu

kubectl delete service --all -n heu

kubectl delete configmap --all -n heu

总结

文章对K8s环境的搭建进行了描述,给出Docker、Docker仓库、k8s环境的搭建步骤,并给出常见报错和解决办法。

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: