HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    kubernetes部署(Kubernetes部署容器群集一般首选()了网络)

    发布时间:2023-04-19 00:04:46     稿源: 创意岭    阅读: 141        

    大家好!今天让创意岭的小编来大家介绍下关于kubernetes部署的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    kubernetes部署(Kubernetes部署容器群集一般首选()了网络)

    一、Kubernetes 部署 MongoDB 集群

    编写 mongo.yaml 文件,提供了一个对外暴露的 NodePort 类型的 Service,用于外部访问。

    启动命令 kubectl create -f mongo.yaml 。

    执行 mongo.yaml 文件成功,如下所示:

    提供了对外暴露的服务 mongo-service ,可通过 主机:NodePort的端口 的方式访问。

    使用 curl http://172.18.232.207:30741 测试连接 MongoDB 。

    其中 172.18.232.207 为 k8s 集群的主机(任一主机), 30741 为 mongo-service 服务的 NodePort 端口。如下图所示:

    ------------------------------我是华丽的分割线----------------------------

    hostpath会把宿主机上的指定卷加载到容器之中,但如果 Pod 发生跨主机的重建,数据会丢失,无法保证数据持久化。如果需要做数据持久化,建议使用PV、PVC。下面是kafka数据持久化的一个示例:

    二、Kubernetes等待部署完成 kubectl wait rollout

    使用kubectl apply或者create命令创建/更新部署后,其pod需要时间完成创建/更新。

    如果在CI中不等待所有pod更新完成,下一步流程很有可能使用更新前的环境。

    根据实际情况 kubectl rollout status 命令,能够正确的获取rollout status。

    以上shell脚本经过轮询 kubectl rollout status 可以很好的解决实际问题。

    注意 kubectl wait 命令不能适用于更新部署。

    该命令只能判断deployment是否available,不能用来判断rollout,即available状态的deployment,很可能老的pod还在terminating,新的pod还没创建好。

    三、k8s安装部署

    K8s集群搭建

    1 centos版本信息查看

    [root@localhost ~]# uname -a

    Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

    k8s集群机器关闭防火墙

    [root@localhost ~]# systemctl stop firewalld

    [root@localhost ~]# systemctl disable firewalld

    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

    2 安装必要的包

    k8s集群安装以下安装包

    [root@k8s-node ~]# yum -y install net-tools wget vim ntpd

    [root@k8s-node ~]# systemctl enable ntpd

    [root@k8s-node ~]# systemctl start ntpd

    3配置hosts

    [root@k8s-node ~]# cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    192.168.248.141 k8s-master

    192.168.248.142 k8s-node

    4 部署master节点

    4.1 Master节点安装必要的安装包

    [root@k8s-master ~]# yum -y install etcd

    4.2更改/etc/etcd/etcd.conf配置文件

    [root@k8s-master etcd]# cat /etc/etcd/etcd.conf | grep -v "^#"

    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"

    ETCD_NAME="master"

    ETCD_ADVERTISE_CLIENT_URLS= http://k8s-master:2379,http://k8s-master:4001

    4.3设置开机启动并验证状态

    [root@k8s-master ~]#systemctl enable etcd

    [root@k8s-master ~]#systemctl start etcd

    etcd检查

    [root@k8s_master ~]# etcdctl -C http://k8s-master:4001 cluster-health

    member 8e9e05c52164694d is healthy: got healthy result from http://k8s_master:2379 cluster is healthy

    [root@k8s_master ~]# etcdctl -C http://k8s-master:2379 cluster-health

    member 8e9e05c52164694d is healthy: got healthy result from http://k8s_master:2379 cluster is healthy

    5 安装部署docker环境(略)

    6 安装kubernetes

    [root@k8s_master ~]# yum install kubernetes

    安装过程中报错如下

    Error: docker-ce conflicts with 2:docker-1.13.1-75.git8633870.el7.centos.x86_64

    可以执行如下命令解决

    1、查看安装过的docker:yum list installed | grep docker

    2、卸载docker:yum remove -y docker-ce.x86_64 0:18.03.0.ce-1.el7.centos

    3、删除容器镜像:rm -rf /var/lib/docker

    再次安装kubernetes,安装成功,而且会自动安装docker

    6.1修改apiserver服务的配置文件

    [root@k8s-master kubernetes]# cat /etc/kubernetes/apiserver | grep -v "^#"

    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

    KUBE_API_PORT="--port=8080"

    KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.248.141:2379"

    KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

    KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

    KUBE_API_ARGS=""

    6.2修改config配置文件:

    [root@k8s-master kubernetes]# cat /etc/kubernetes/config | grep -v "^#"

    KUBE_LOGTOSTDERR="--logtostderr=true"

    KUBE_LOG_LEVEL="--v=0"

    KUBE_ALLOW_PRIV="--allow-privileged=false"

    KUBE_MASTER="--master=http://192.168.248.141:8080"

    设置开机启动,开启服务

    [root@k8s-master ~]#systemctl enable kube-apiserver kube-controller-manager kube-scheduler docker

    [root@k8s-master ~]#systemctl start kube-apiserver kube-controller-manager kube-scheduler docker

    6.3查看服务端口:

    [root@k8s-master ~]# netstat –tnlp

    Active Internet connections (only servers)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   

    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1273/master        

    tcp        0      0 127.0.0.1:2380          0.0.0.0:*               LISTEN      2126/etcd          

    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      571/rpcbind        

    tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1362/dnsmasq       

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      998/sshd           

    tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      996/cupsd          

    tcp6       0      0 ::1:25                  :::*                    LISTEN      1273/master        

    tcp6       0      0 :::4001                 :::*                    LISTEN      2126/etcd          

    tcp6       0      0 :::6443                 :::*                    LISTEN      3216/kube-apiserver

    tcp6       0      0 :::10251                :::*                    LISTEN      3222/kube-scheduler

    tcp6       0      0 :::2379                 :::*                    LISTEN      2126/etcd          

    tcp6       0      0 :::10252                :::*                    LISTEN      3221/kube-controlle

    tcp6       0      0 :::111                  :::*                    LISTEN      571/rpcbind        

    tcp6       0      0 :::8080                 :::*                    LISTEN      3216/kube-apiserver

    tcp6       0      0 :::22                   :::*                    LISTEN      998/sshd           

    tcp6       0      0 ::1:631                 :::*                    LISTEN      996/cupsd 

    7部署node节点

    7.1安装docker(略)安装k8s(略)

    7.2 Node节点主机做以下配置:

    修改config配置文件

    [root@k8s-node kubernetes]# cat /etc/kubernetes/config | grep -v "^#"

    KUBE_LOGTOSTDERR="--logtostderr=true"

    KUBE_LOG_LEVEL="--v=0"

    KUBE_ALLOW_PRIV="--allow-privileged=false"

    KUBE_MASTER="--master=http://192.168.248.141:8080"

    修改kubelet配置文件

    [root@k8s-node kubernetes]# cat /etc/kubernetes/kubelet | grep -v "^#"

    KUBELET_ADDRESS="--address=0.0.0.0"

    KUBELET_HOSTNAME="--hostname-override=192.168.248.142"

    KUBELET_API_SERVER="--api-servers=http://192.168.248.141:8080"

    KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

    KUBELET_ARGS=""

    设置开机启动、开启服务

    [root@k8s_client1 ~]# systemctl enable kubelet kube-proxy

    [root@k8s_client1 ~]# systemctl start kubelet kube-proxy

    查看端口:

    [root@k8s_client1 ~]# netstat –ntlp

    Active Internet connections (only servers)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   

    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1277/master        

    tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      3246/kubelet       

    tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      3133/kube-proxy    

    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      575/rpcbind        

    tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1332/dnsmasq       

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1000/sshd          

    tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      998/cupsd          

    tcp6       0      0 ::1:25                  :::*                    LISTEN      1277/master        

    tcp6       0      0 :::4194                 :::*                    LISTEN      3246/kubelet       

    tcp6       0      0 :::10250                :::*                    LISTEN      3246/kubelet       

    tcp6       0      0 :::10255                :::*                    LISTEN      3246/kubelet       

    tcp6       0      0 :::111                  :::*                    LISTEN      575/rpcbind        

    tcp6       0      0 :::22                   :::*                    LISTEN      1000/sshd          

    tcp6       0      0 ::1:631                 :::*                    LISTEN      998/cupsd      

    Master上查看集群中的节点及节点状态

    [root@k8s-master kubernetes]# kubectl get node

    NAME              STATUS    AGE

    192.168.248.142   Ready     2m

    [root@k8s-master kubernetes]# kubectl -s http://k8s-master:8080 get node

    NAME              STATUS    AGE

    192.168.248.142   Ready     2m

    kubernetes集群搭建完成。

    在k8s集群中创建pod,如果出现如下错误

    其中最主要的问题是:details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)

    解决方案:

    查看/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt (该链接就是上图中的说明) 是一个软链接,但是链接过去后并没有真实的/etc/rhsm,所以需要使用yum安装:

    yum install *rhsm*

    安装完成后,执行一下docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

    如果依然报错,可参考下面的方案:

    wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

    rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

     注释:rpm2cpio命令用于将rpm软件包转换为cpio格式的文件

    cpio命令主要是用来建立或者还原备份档的工具程序,cpio命令可以复制文件到归档包中,或者从归档包中复文件。          

               -i   还原备份档  

               -v  详细显示指令的执行过程

    这两个命令会生成/etc/rhsm/ca/redhat-uep.pem文件.

    [root@k8s-node ~]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

    在master节点新建pod并查看起状态为正常

    flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具。它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip;让所有的容器认为大家在同一个直连的网络,底层通过UDP/VxLAN等进行报文的封装和转发。

    四、企业级k8s集群部署

    二进制包

    注:推荐用二进制包部署Kubernetes集群,虽手动部署麻烦,但可以学习很多工作原理利于后期维护。

    环境

    可以使用VMware虚拟机,宿主机必须8G内存以上

    • 服务器可以访问外网,有从网上拉取镜像的需求

    单Master服务器规划:( 注:部署时候根据具体环境进行IP地址调整即可 )

    这里使用3台组建集群,可容忍1台机器故障,当然,你也可以使用5台组建集群

    etcd1: 192.168.3.110 etcd2: 192.168.3.112 etcd3: 192.168.3.113

    cfssl是一个开源的证书管理工具,使用json文件生成证书,相比openssl更方便使用。

    找任意一台服务器操作,这里用Master节点。

    创建工作目录:

    自签CA:

    生成证书:

    会生成ca.pem和ca-key.pem文件。

    创建证书申请文件:

    注:上述文件hosts字段中IP为所有etcd节点的集群内部通信IP,一个都不能少!为了方便后期扩容可以多写几个预留的IP。

    生成证书:

    会生成etcd.pem和etcd-key.pem文件。

    https://github.com/etcd-io/etcd/releases/download/v3.5.1/ etcd-v3.5.1-linux-amd64.tar.gz

    以下在节点1上操作,然后将文件拷贝到其他集群机器

    把刚才生成的证书拷贝到配置文件中的路径:

    注意修改节点2和节点3分别etcd.conf配置,按照下面提示的修改

    启动各节点的etcd服务

    如果输出上面信息,就说明集群部署成功。

    如果有问题看日志:/var/log/message

    docker二进制下载地址:

    https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

    注:使用yum安装也行

    集群所有机器都安装docker

    生成证书:

    会生成ca.pem和ca-key.pem文件。

    创建证书申请文件:

    生成证书:

    会生成k8s.pem和k8s-key.pem文件。

    下载地址参考:

    https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md

    https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#downloads-for-v12013

    Wget https://dl.k8s.io/v1.20.13/kubernetes-server-linux-amd64.tar.gz

    把刚才生成的证书拷贝到配置文件中的路径:

    TLS Bootstrapping 机制,对work-node加入进行自签证书用

    创建上述配置文件中token文件:

    token 可以自行生产,百度下怎么生产

    kube-apiserver服务

    生成kube-controller-manager证书:

    生成kubeconfig文件(以下是shell命令,直接在终端执行):

    生成kube-scheduler证书:

    生成kubeconfig文件:

    生成kubeconfig文件:

    通过kubectl工具查看当前集群组件状态:

    在所有worker node创建工作目录:

    从master节点拷贝:

    注:由于网络插件还没有部署,节点会没有准备就绪 NotReady

    二进制包下载地址:https://github.com/containernetworking/plugins/releases

    确保kubelet启用CNI:

    在Master执行:

    应用场景:例如kubectl logs

    在Master节点将Worker Node涉及文件拷贝到新节点192.168.3.112/113

    注:这几个文件是证书申请审批后自动生成的,每个Node不同,必须删除

    Node2(192.168.3.113 )节点同上。记得修改主机名!

    访问地址:https://NodeIP:30001

    创建service account并绑定默认cluster-admin管理员集群角色:

    使用输出的token登录Dashboard。

    CoreDNS用于集群内部Service名称解析。

    DNS解析测试:

    这样 单Master集群就搭建完成了

    以上就是关于kubernetes部署相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    淘宝SKU图片要求(淘宝sku图片格式)

    运营中的sku是啥意思(运营中的sku是啥意思啊)

    拼多多更改sku后流量起不来(拼多多更改sku后流量起不来怎么回事)

    平顶山居住区景观设计(平顶山居住区景观设计招聘)

    抖音卖水果的网红排行榜(抖音卖水果的网红排行榜前十名)