精华内容
下载资源
问答
  • 一台服务器搭建k8s
    千次阅读
    2022-02-22 10:23:22
    1. 做的前提需要把自己需要的rpm包提前放到app目录下!!!
    2. 设置hostname
      1. hostnamectl set-hostname 机器名
      2. 修改/etc/hosts,加入一行”本机ip 机器名”,例如

    192.168.12.33 master

    1. 升级内核
      1. 进入app/rpm/kernel执行yum localinstall *.rpm将安装好4.17.11-1.el7.elrepo版本的内核,然后执行reboot重启
      2. 配置新内核为开机默认内核(此方法适配bios,uefi略有不同自行百度)
        1. awk -F\' /^menuentry/{print\$2} /etc/grub2.cfg列出已安装内核,从上到下为编号0开始的列表,编号可能不显示
        2. grub2-set-default 刚刚4.17内核的编号
        3. cat /boot/grub2/grubenv |grep saved查看saved_entry是否为刚刚设置的编号
        4. grub2-mkconfig -o /boot/grub2/grub.cfg重建grub2
        5. 重启后执行uname -a查看是否为想要的内核
    2. 配置内核参数
      1. 创建/etc/modules-load.d/k8s.conf文件内容为br_netfilter
      2. 创建/etc/sysctl.d/k8s.conf文件,内容为

    net.bridge.bridge-nf-call-ip6tables = 1

    net.bridge.bridge-nf-call-iptables = 1

      1. sysctl --system
    1. 关闭并禁用防火墙 systemctl stop firewalld&& systemctl disable firewalld
    2. 禁用selinux
      1. 先当场禁用setenforce 0
      2. 永久禁用(重启后生效)修改/etc/selinux/config将SELINUX=enforcing改为SELINUX=disabled
    3. 禁用swap
      1. (如果已挂载)卸载交换分区 swapoff -a
      2. 将/etc/fstab中的swap行注释掉

    安装Docker

    1. 进入app/rpm/docker执行yum localinstall *.rpm将安装好20.10.12版本的docker
    2. 启动并设置docker开机启动systemctl start docker&&systemctl enable docker
    3. 修改docker的cgroup driver
      1. systemctl stop docker停止docker服务
      2. 创建/etc/docker/daemon.json文件,内容为

    {   

    "exec-opts": ["native.cgroupdriver=systemd"],   

    "log-driver": "json-file",   

    "log-opts": {     "max-size": "100m"   },   

    "storage-driver": "overlay2"

    }

      1. systemctl start docker重启docker

    导入平台镜像

    进入app/images使用docker load xxx.tar.gz命令一一导入

    安装kubernetes

    进入app/rpm/kubernetes执行yum localinstall *.rpm将安装好1.16.3版本的kubernetes

    初始化节点

    1. 执行kubeadm init --kubernetes-version=v1.16.3 --apiserver-advertise-address=xxx.yyy.zzz.uuuu --pod-network-cidr=10.244.0.0/16

    --apiserver-advertise-address内容为本机ip地址,pod-network-cidr不要变更,此为flannel的默认服务地址范围

    初始化输出结果的三条命令一定要执行,不然初始化不会成功。

    1. 执行kubectl get pod -A -o wide检查容器状态,应该一共有七个容器,除了两个coredns是pending外其他容器都应为ready并且在running
    2. 为了使我们的master节点也能部署服务,执行kubectl taint nodes 主机名 node-role.kubernetes.io/master-
    3. 部署flannel
      1. 提前下载好容器,这里我忘记放进install包了,可以试下直接执行4.2,不成功再去下载
      2. 执行kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      3. 应出现类似以下结果

    podsecuritypolicy.extensions/psp.flannel.unprivileged created clusterrole.rbac.authorization.k8s.io/flannel created clusterrolebinding.rbac.authorization.k8s.io/flannel created serviceaccount/flannel created configmap/kube-flannel-cfg created daemonset.extensions/kube-flannel-ds-amd64 created daemonset.extensions/kube-flannel-ds-arm64 created daemonset.extensions/kube-flannel-ds-arm created daemonset.extensions/kube-flannel-ds-ppc64le created daemonset.extensions/kube-flannel-ds-s390x created

      1. 执行kubectl get pod -A -o wide在kube-system明明空间内应有flannel容器

    安装helm

    1. 在app内执行tar zxf helm-v3.7.2-linux-amd64.tar.gz
    2. 将helm添加进path, mv linux-amd64/helm /usr/local/bin/helm

    拉取nginx

    1. 添加应用仓库,执行helm repo add bitnami https://charts.bitnami.com/bitnami
    2. helm install my-release bitnami/nginx

    部署nginx

    执行helm install my-release bitnami/nginx将刚刚拉取的nginx镜像部署为my-release

    建立服务

    1. 执行kubectl expose deployment my-release-nginx  --type=NodePort --name=nginx-test,将my-release暴露为nodeport模式的nginx-test服务
    2. 执行kubectl describe services nginx-test可以检查刚刚部署的服务,其中的nodeport是我们可以从外部访问服务的端口,targetport是nodeport映射入容器的端口
    3. 访问ip:nodeport此时我们应该能看到nginx的欢迎页面
    更多相关内容
  • 搭建k8s

    2021-12-20 17:32:35
    如果你对上面的某些名字感到陌生,没关系,下文会一一进行讲解,如果你想先了解一下 docker 和 k8s,可以参考 10分钟看懂Docker和K8S。好了,在正式开始之前,首先看一下我们都有哪些服务器,如果你对如何组建如下...

    前言

    本文介绍如何在ubuntu上部署k8s集群,大致可以分为如下几个步骤:

    • 修改ubuntu配置
    • 安装docker
    • 安装kubeadmkubectl以及kubelet
    • 初始化master节点
    • slave节点加入网络
    主机名主机ip版本CPU内存
    master1192.168.56.11Ubuntu server 18.042核1G
    worker1192.168.56.21Ubuntu server 18.042核1G

    master1上部署管理节点,在worker1上部署工作节点。如果想了解如何创建这两个节点,可以参考 virtualbox 虚拟机组网 。服务器配置上,k8s 要求 CPU 最低为 2 核,不然在安装过程中会报错,虽然这个错误可以避免,但是为了稳定起见还是把虚拟机的配置成它想要的,至于内存 k8s 没有硬性要求,所以我就按我电脑的性能来分配了。

    一. 修改 ubuntu 配置

    首先,k8s 要求我们的 ubuntu 进行一些符合它要求的配置。很简单,包括以下两步:关闭 Swap 内存 以及 配置免密登录,这一步两台主机都需要进行配置。

    关闭 swap 内存

    这个swap其实可以类比成 windows 上的虚拟内存,它可以让服务器在内存吃满的情况下可以保持低效运行,而不是直接卡死。但是 k8s 的较新版本都要求关闭swap。所以咱们直接动手,修改/etc/fstab文件:

    sudo vi /etc/fstab
    

    你应该可以看到如下内容,把第二条用#注释掉就好了,注意第一条别注释了,不然重启之后系统有可能会报file system read-only错误。

    UUID=e2048966-750b-4795-a9a2-7b477d6681bf /   ext4    errors=remount-ro 0    1
    # /dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
    

    然后输入reboot重启即可,重启后使用top命令查看任务管理器,如果看到如下KiB Swap后均为 0 就说明关闭成功了。

    关闭swap之后的任务管理器

    上面说的是永久关闭swap内存,其实也可以暂时关闭,使用swapoff -a命令即可,效果会在重启后消失。

    配置免密登录

    k8s 要求 管理节点可以直接免密登录工作节点 的原因是:在集群搭建完成后,管理节点的 kubelet 需要登陆工作节点进行操作。而至于怎么操作很简单,这里就不详提了,可以参见文章 virtualbox 虚拟机组网 的最后一个章节 免密钥登录

    二. 安装 docker

    docker 是 k8s 的基础,在安装完成之后也需要修改一些配置来适配 k8s ,所以本章分为 docker 的安装docker 的配置 两部分。如果你已经安装并使用了一段时间的 docker 了话,建议使用docker -v查看已安装的 docker 版本,并在 k8s 官网上查询适合该版本的 k8s 进行安装。这一步两台主机都需要进行安装。

    docker 的安装

    docker 在 ubuntu 的安装上真是再简单不过了,执行如下命令即可,在安装之前请记得把镜像源切换到国内。

    sudo apt install docker.io
    

    等安装完成之后使用docker -v来验证 docker是否可用。

    docker 的配置

    安装完成之后需要进行一些配置,包括 切换docker下载源为国内镜像站 以及 修改cgroups

    这个cgroups是啥呢,你可以把它理解成一个进程隔离工具,docker就是用它来实现容器的隔离的。docker 默认使用的是cgroupfs,而 k8s 也用到了一个进程隔离工具systemd,如果使用两个隔离组的话可能会引起异常,所以我们要把 docker 的也改成systemd

    这两者都是在/etc/docker/daemon.json里修改的,所以我们一起配置了就好了,首先执行下述命令编辑daemon.json

    sudo vi /etc/docker/daemon.json
    

    打开后输入以下内容:

    {
      "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn"
      ],
      "exec-opts": [ "native.cgroupdriver=systemd" ]
    }
    

    然后:wq保存后重启 docker:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    然后就可以通过docker info | grep Cgroup来查看修改后的 docker cgroup 状态,发现变为systemd即为修改成功。

    三. 安装 k8s

    安装完了 docker 就可以下载 k8s 的三个主要组件kubeletkubeadm以及kubectl了。这一步两台主机都需要进行安装。先来简单介绍一下这三者:

    • kubelet: k8s 的核心服务
    • kubeadm: 这个是用于快速安装 k8s 的一个集成工具,我们在master1worker1上的 k8s 部署都将使用它来完成。
    • kubectl: k8s 的命令行工具,部署完成之后后续的操作都要用它来执行

    其实这三个的下载很简单,直接用apt-get就好了,但是因为某些原因,它们的下载地址不存在了。所以我们需要用国内的镜像站来下载,也很简单,依次执行下面五条命令即可:

    # 使得 apt 支持 ssl 传输
    apt-get update && apt-get install -y apt-transport-https
    # 下载 gpg 密钥
    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
    # 添加 k8s 镜像源
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    # 更新源列表
    apt-get update
    # 下载 kubectl,kubeadm以及 kubelet
    apt-get install -y kubelet kubeadm kubectl
    

    直接在/etc/apt/sources.list里添加https://mirrors.aliyun.com/kubernetes/apt/是不行的,因为这个阿里镜像站使用的ssl进行传输的,所以要先安装apt-transport-https并下载镜像站的密钥才可以进行下载。

    四. 安装 master 节点

    下载完成后就要迎来重头戏了,初始化master节点,这一章节只需要在管理节点上配置即可,大致可以分为如下几步:

    • 初始化master节点
    • 部署flannel网络
    • 配置kubectl工具

    初始化 master 节点

    使用kubeadminit命令就可以轻松的完成初始化,不过需要携带几个参数,如下。先不要直接复制执行,将赋值给--apiserver-advertise-address参数的 ip 地址修改为自己的master主机地址,然后再执行。

    kubeadm init \
    --apiserver-advertise-address=192.168.56.11 \
    --image-repository registry.aliyuncs.com/google_containers \
    --pod-network-cidr=10.244.0.0/16
    

    这里介绍一下一些常用参数的含义:

    • --apiserver-advertise-address: k8s 中的主要服务apiserver的部署地址,填自己的管理节点 ip
    • --image-repository: 拉取的 docker 镜像源,因为初始化的时候kubeadm会去拉 k8s 的很多组件来进行部署,所以需要指定国内镜像源,下不然会拉取不到镜像。
    • --pod-network-cidr: 这个是 k8s 采用的节点网络,因为我们将要使用flannel作为 k8s 的网络,所以这里填10.244.0.0/16就好
    • --kubernetes-version: 这个是用来指定你要部署的 k8s 版本的,一般不用填,不过如果初始化过程中出现了因为版本不对导致的安装错误的话,可以用这个参数手动指定。
    • --ignore-preflight-errors: 忽略初始化时遇到的错误,比如说我想忽略 cpu 数量不够 2 核引起的错误,就可以用--ignore-preflight-errors=CpuNum。错误名称在初始化错误时会给出来。

    当你看到如下字样是,就说明初始化成功了,请把最后那行以kubeadm join开头的命令复制下来,之后安装工作节点时要用到的,如果你不慎遗失了该命令,可以在master节点上使用kubeadm token create --print-join-command命令来重新生成一条。

    Your Kubernetes master has initialized successfully!
     
    To start using your cluster, you need to run the following as a regular user:
     
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
     
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
     
    You can now join any number of machines by running the following on each node
    as root:
     
    kubeadm join 192.168.56.11:6443 --token wbryr0.am1n476fgjsno6wa --discovery-token-ca-cert-hash sha256:7640582747efefe7c2d537655e428faa6275dbaff631de37822eb8fd4c054807
    

    如果在初始化过程中出现了任何Error导致初始化终止了,使用kubeadm reset重置之后再重新进行初始化。

    配置 kubectl 工具

    这一步就比较简单了,直接执行如下命令即可:

    mkdir -p /root/.kube && \
    cp /etc/kubernetes/admin.conf /root/.kube/config
    

    执行完成后并不会刷新出什么信息,可以通过下面两条命令测试 kubectl是否可用:

    # 查看已加入的节点
    kubectl get nodes
    # 查看集群状态
    kubectl get cs
    

    部署 flannel 网络

    flannel是什么?它是一个专门为 k8s 设置的网络规划服务,可以让集群中的不同节点主机创建的 docker 容器都具有全集群唯一的虚拟IP地址。想要部署flannel的话直接执行下述命令即可:

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

    如果被墙,可以直接保存下列文件进行安装 kubectl apply -f flannel.yaml

    ---
    apiVersion: policy/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: psp.flannel.unprivileged
      annotations:
        seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
        seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
        apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
        apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
    spec:
      privileged: false
      volumes:
      - configMap
      - secret
      - emptyDir
      - hostPath
      allowedHostPaths:
      - pathPrefix: "/etc/cni/net.d"
      - pathPrefix: "/etc/kube-flannel"
      - pathPrefix: "/run/flannel"
      readOnlyRootFilesystem: false
      # Users and groups
      runAsUser:
        rule: RunAsAny
      supplementalGroups:
        rule: RunAsAny
      fsGroup:
        rule: RunAsAny
      # Privilege Escalation
      allowPrivilegeEscalation: false
      defaultAllowPrivilegeEscalation: false
      # Capabilities
      allowedCapabilities: ['NET_ADMIN', 'NET_RAW']
      defaultAddCapabilities: []
      requiredDropCapabilities: []
      # Host namespaces
      hostPID: false
      hostIPC: false
      hostNetwork: true
      hostPorts:
      - min: 0
        max: 65535
      # SELinux
      seLinux:
        # SELinux is unused in CaaSP
        rule: 'RunAsAny'
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: flannel
    rules:
    - apiGroups: ['extensions']
      resources: ['podsecuritypolicies']
      verbs: ['use']
      resourceNames: ['psp.flannel.unprivileged']
    - apiGroups:
      - ""
      resources:
      - pods
      verbs:
      - get
    - apiGroups:
      - ""
      resources:
      - nodes
      verbs:
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - nodes/status
      verbs:
      - patch
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: flannel
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: flannel
    subjects:
    - kind: ServiceAccount
      name: flannel
      namespace: kube-system
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: flannel
      namespace: kube-system
    ---
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: kube-flannel-cfg
      namespace: kube-system
      labels:
        tier: node
        app: flannel
    data:
      cni-conf.json: |
        {
          "name": "cbr0",
          "cniVersion": "0.3.1",
          "plugins": [
            {
              "type": "flannel",
              "delegate": {
                "hairpinMode": true,
                "isDefaultGateway": true
              }
            },
            {
              "type": "portmap",
              "capabilities": {
                "portMappings": true
              }
            }
          ]
        }
      net-conf.json: |
        {
          "Network": "10.244.0.0/16",
          "Backend": {
            "Type": "vxlan"
          }
        }
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: kube-flannel-ds
      namespace: kube-system
      labels:
        tier: node
        app: flannel
    spec:
      selector:
        matchLabels:
          app: flannel
      template:
        metadata:
          labels:
            tier: node
            app: flannel
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: kubernetes.io/os
                    operator: In
                    values:
                    - linux
          hostNetwork: true
          priorityClassName: system-node-critical
          tolerations:
          - operator: Exists
            effect: NoSchedule
          serviceAccountName: flannel
          initContainers:
          - name: install-cni-plugin
           #image: flannelcni/flannel-cni-plugin:v1.1.0 for ppc64le and mips64le (dockerhub limitations may apply)
            image: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0
            command:
            - cp
            args:
            - -f
            - /flannel
            - /opt/cni/bin/flannel
            volumeMounts:
            - name: cni-plugin
              mountPath: /opt/cni/bin
          - name: install-cni
           #image: flannelcni/flannel:v0.18.1 for ppc64le and mips64le (dockerhub limitations may apply)
            image: rancher/mirrored-flannelcni-flannel:v0.18.1
            command:
            - cp
            args:
            - -f
            - /etc/kube-flannel/cni-conf.json
            - /etc/cni/net.d/10-flannel.conflist
            volumeMounts:
            - name: cni
              mountPath: /etc/cni/net.d
            - name: flannel-cfg
              mountPath: /etc/kube-flannel/
          containers:
          - name: kube-flannel
           #image: flannelcni/flannel:v0.18.1 for ppc64le and mips64le (dockerhub limitations may apply)
            image: rancher/mirrored-flannelcni-flannel:v0.18.1
            command:
            - /opt/bin/flanneld
            args:
            - --ip-masq
            - --kube-subnet-mgr
            resources:
              requests:
                cpu: "100m"
                memory: "50Mi"
              limits:
                cpu: "100m"
                memory: "50Mi"
            securityContext:
              privileged: false
              capabilities:
                add: ["NET_ADMIN", "NET_RAW"]
            env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: EVENT_QUEUE_DEPTH
              value: "5000"
            volumeMounts:
            - name: run
              mountPath: /run/flannel
            - name: flannel-cfg
              mountPath: /etc/kube-flannel/
            - name: xtables-lock
              mountPath: /run/xtables.lock
          volumes:
          - name: run
            hostPath:
              path: /run/flannel
          - name: cni-plugin
            hostPath:
              path: /opt/cni/bin
          - name: cni
            hostPath:
              path: /etc/cni/net.d
          - name: flannel-cfg
            configMap:
              name: kube-flannel-cfg
          - name: xtables-lock
            hostPath:
              path: /run/xtables.lock
              type: FileOrCreate

    输出如下内容即为安装完成:

    clusterrole.rbac.authorization.k8s.io/flannel created
    clusterrolebinding.rbac.authorization.k8s.io/flannel created
    serviceaccount/flannel created
    configmap/kube-flannel-cfg created
    daemonset.extensions/kube-flannel-ds-amd64 created
    daemonset.extensions/kube-flannel-ds-arm64 created
    daemonset.extensions/kube-flannel-ds-arm created
    daemonset.extensions/kube-flannel-ds-ppc64le created
    daemonset.extensions/kube-flannel-ds-s390x created
    

    至此,k8s 管理节点部署完成。

    五. 将 slave 节点加入网络

    首先需要重复步骤 1 ~ 3 来安装 docker 、k8s 以及修改服务器配置,之后执行从步骤 4 中保存的命令即可完成加入,注意,这条命令每个人的都不一样,不要直接复制执行:

    kubeadm join 192.168.56.11:6443 --token wbryr0.am1n476fgjsno6wa --discovery-token-ca-cert-hash sha256:7640582747efefe7c2d537655e428faa6275dbaff631de37822eb8fd4c054807
    

    待控制台中输出以下内容后即为加入成功:

    This node has joined the cluster:
    * Certificate signing request was sent to apiserver and a response was received.
    * The Kubelet was informed of the new secure connection details.
    Run 'kubectl get nodes' on the master to see this node join the cluster.
    

    随后登录master1查看已加入节点状态,可以看到worker1已加入,并且状态均为就绪。至此,k8s 搭建完成:

    root@master1:~# kubectl get nodes
    NAME      STATUS   ROLES    AGE    VERSION
    master1   Ready    master   145m   v1.15.0
    worker1   Ready    <none>   87m    v1.15.0
    

    默认网卡问题修复

    如果你是使用virtualBox部署的虚拟机,并且虚拟机直接无法使用网卡1的 ip 地址互相访问的话(例如组建双网卡,网卡1为 NAT 地址转换用来上网,网卡2为Host-only,用于虚拟机之间访问)。就需要执行本节的内容来修改 k8s 的默认网卡。不然会出现一些命令无法使用的问题。如果你的默认网卡可以进行虚拟机之间的相互访问,则没有该问题。

    修改 kubelet 默认地址

    访问kubelet配置文件:

    sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    

    在最后一行ExecStart 之前 添加如下内容:

    Environment="KUBELET_EXTRA_ARGS=--node-ip=192.168.56.21"
    

    重启kubelet

    systemctl stop kubelet.service && \
    systemctl daemon-reload && \
    systemctl start kubelet.service
    

    至此修改完成,更多信息详见 kubectl logs、exec、port-forward 执行失败问题解决

    修改 flannel 的默认网卡

    编辑flannel配置文件

    sudo kubectl edit daemonset kube-flannel-ds-amd64 -n kube-system
    

    找到spec.template.spec.containers.args字段并添加--iface=网卡名,例如我的网卡是enp0s8

    - args:
      - --ip-masq
      - --kube-subnet-mgr
      # 添加到这里
      - --iface=enp0s8
    

    :wq保存修改后输入以下内容删除所有 flannel,k8s 会自动重建:

    kubectl delete pod -n kube-system -l app=flannel
    

    至此修改完成,更多内容请见 解决k8s无法通过svc访问其他节点pod的问题

    总结

    至此你应该已经搭建好了一个完整可用的双节点 k8s 集群了。

    展开全文
  • k8s 部署多台服务器_搭建k8s可用集群

    千次阅读 2020-10-19 22:45:59
    k8s诞生于2014年,google出品,如今已经是0202年了,站在岸上学不会游泳,还不搭建k8s集群来玩玩吗?机器准备三台位于国外的服务器(1)k8s的相关组件官方镜像在国外,国外的服务器能防止下载的时候被block。国内的...
    k8s诞生于2014年,google出品,如今已经是0202年了,站在岸上学不会游泳,还不搭建个k8s集群来玩玩吗?

    机器准备

    • 三台位于国外的服务器
    (1)k8s的相关组件官方镜像在国外,国外的服务器能防止下载的时候被block。国内的服务器可以考虑国内的
    镜像,网上有相关教程。
    (2)一台作为集群的master,另外两台作为node。
    (3)用作master的机器cpu核数>=2核,这是k8s对硬件上的硬性规定。
    (4)服务器的操作系统这里使用的是ubuntu 16.04 x64版本,其它系统未实验过。

    软件版本

    • ubuntu 16.04 x64
    • docker 18.09.7
    • k8s 1.17.3
    (1)docker和k8s组件的版本都是安装时默认安装的版本。

    前期工作

    • 关闭swap内存
    非必选操作。关闭swap是k8s出于性能上的考虑。
    (1)修改下面文件
    vi /etc/fstab
    (2)使用#号注释掉文件内容第二行,注释后如下
    UUID=e2048966-750b-4795-a9a2-7b477d6681bf /   ext4    errors=remount-ro 0    1
    # /dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
    (3)reboot命令重启服务器
    (4)top命令查看是否生效
    • 修改主机名字
    非必选操作。给主机起个利于分辨的名字,后面使用起来方便。
    (1)将master机器的host修改为k8s-master,node的机器host名字修改为k8s-node1和k8s-node2。
    hostnamectl set-hostname host-name
    (2)执行下面指令使生效
    /bin/bash

    正式搭建k8s集群

    • 安装docker(master,node上操作)
    (1)执行下面命令
    apt-get update && apt-get install docker.io
    (2)安装完成后,可以通过下面命令查看docker信息
    docker info
    • 安装k8s的三个必备组件(master,node上操作)
    (1)分别执行下面命令
    apt-get update && apt-get install -y apt-transport-https
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb http://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    apt-get update
    apt-get install -y kubelet kubeadm kubectl
    (2)分别通过执行kubelet kubeadm kubectl可以验证是否安装成功
    • 修改kubelet或者docker使用的cgroup驱动(master,node上操作)
    docker默认使用的是cgroup驱动是cgroupfs,而k8s使用的systemd。虽然k8s推荐使用的是systemd,但是貌似网上说有坑,所以这里我选择修改k8s为cgroupfs驱动。
    (1)修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf的文件
    vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    
    (2)在文件中添加增加--cgroup-driver=cgroupfs参数,找到下面那行,末尾添加即可
    Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=cgroupfs"
    
    (3)重启kubelet
    systemctl daemon-reload
    systemctl restart kubelet
    • 用kubeadm组件初始化cluster(master上操作)
    (1)执行下面命令,xxxxxxxxx部分为master机器的固定ip,用来和node机器通信用。集群的组网我选择flannel方式,所以后面固定是--pod-network-cidr=10.244.0.0/16。
    kubeadm init --apiserver-advertise-address xxxxxxxxx --pod-network-cidr=10.244.0.0/16
    (2)上面命令执行完后会出现一串信息,找到类似下面的信息并保存,后面注册node到master使用。
    kubeadm join xxxxxxxx:6443 --token xihr3k.9ivh8jm1c5zysyg3 --discovery-token-ca-cert-hash sha256:ab1590a3ee63c72d9f57f44caf9a459a97fad6f6d31966738e494a1824c74e64
    • master机器上创建普通用户(master操作)
    这个是为了下一步配置kubectl使用。
    (1)创建用户,指定/bin/bash作为默认shell
    useradd -r -m -s /bin/bash xxx
    (2)设置密码
    passwd xxx
    (3)添加sudo权限
    usermod -G sudo username
    
    
    tips:
    (1)切换为root用户命令
    su
    (2)切换为某个普通用户命令
    su username
    • 配置kubectl(master操作)
    (1)切换到上一步创建的普通用户
    su username
    (2)执行下面命令
    sudo mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    (3)添加kubectl提示功能
    sudo echo "source <(kubectl completion bash)" >> ~/.bashrc
    • 安装pod网络(master操作)
    (1)之心部署flannel网络的命令
    sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 
    • 注册node到master(node操作)
    (1)找到kubeadm初始化master时保存的命令,分别在node上执行
    kubeadm join xxxxxxxx:6443 --token xihr3k.9ivh8jm1c5zysyg3 --discovery-token-ca-cert-hash sha256:ab1590a3ee63c72d9f57f44caf9a459a97fad6f6d31966738e494a1824c74e64 
    • 查看集群的所有机器(master操作)
    (1)使用之前创建的普通用户执行下面指令,看到有三台机器,说明成功了!!!
    kubectl get nodes

    5d05bfbc-d611-eb11-8da9-e4434bdf6706.png

    小结

    如果你成功搭建了k8s集群,恭喜你,可以愉快的玩耍了!
    如果你还在继续折腾,在解决搭建过程遇到的问题,别灰心,just one more try!

    从本文

    (1)在搭建的过程中,发现修改了不少配置文件,实际使用的时候最好有backup思想,有backup,没在怕。

    reference:

    (1)https://kubernetes.io/
    (2)《每天5分钟玩转kubernetes》

    各位看官如果觉得本文对你有帮助,不妨点个赞和关注!!!

    展开全文
  • 多个公网服务器搭建k8s集群

    千次阅读 2022-01-22 16:35:23
    Ubuntu20.04 Ubuntu18.04 Ubuntu20.04 三台云服务器搭建k8s v1.23.0版本,下面具体的操作会在括号中表明是哪些主机需要的操作 二、核心问题 屏蔽云服务器公网/内网IP问题: 现在的云服务器的公网IP是不会直接配置在...

    参考:

    • 写的很详细的博客,很多来自于此:https://www.caiyifan.cn/p/d6990d10.html
    • https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
    • https://blog.csdn.net/qq_39382182/article/details/121915330
    • https://blog.lanweihong.com/posts/56314/

    公网云服务器搭建k8s不是一件很好玩的事,会遇到各种麻烦,个人建议如果有条件直接在内网组建即可

    一、集群配置与建立

    注意:选择的Master节点必须>2核CPU

    masterNode1Node2
    IP(公网)211.159.224.96124.223.56.20847.103.203.133
    IP(私有)10.0.16.1510.0.16.14172.17.59.2
    系统Ubuntu20.04Ubuntu18.04Ubuntu20.04

    三台云服务器搭建k8s v1.23.0版本,下面具体的操作会在括号中表明是哪些主机需要的操作

    二、核心问题

    屏蔽云服务器公网/内网IP问题:

    现在的云服务器的公网IP是不会直接配置在服务器的网卡上的,网卡上的是内网IP,而多个服务器的内网IP一定不会在同一个网段,所以配置公网服务器之间的K8S集群最大的问题就在于此,可以总结为:

    • master主机kubeadm init时用内网IP还是公网IP?
    • flannel插件:pod不互通,其实这个问题可能就是第一个问题没处理好造成的

    这些问题有不同的解决方案,网上给出了很多,我也尝试了很多,但是也有很多失败,下面的部分(三~)只写了成功部署的方法,其他的解决方法会在最后部分给出链接与相关信息。

    因为也是接触k8s没多久,很多问题我也不明所以然(可能知道解决方法),所以我的目标是先部署没问题,原理学习完毕后再回来看这些问题。

    三、前置工作

    2.2 创建虚拟网卡(每个主机)

    我们直接使用服务器公网IP启动K8S集群,但是直接是不行的,服务器上没有这个IP的网卡,所以我们需要在对应网卡上创建一个对应公网IP的虚拟网卡:

    持久化创建一个虚拟网卡,防止重启失效

    sudo vim /etc/network/interfaces
    

    添加以下内容:

    auto eth0:1
    iface eth0:1 inet static
    address <主网IP>
    netmask 255.255.255.0
    # 重启网卡
    /etc/init.d/networking restart    # 没有就安装 apt install ifupdown ifupdown2 netscript-2.4
    

    如果有问题,查阅:https://www.cxyzjd.com/article/White_Idiot/82934338

    2.3 安装前的设置(每个主机)

    # 关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    ufw disable # ubuntu
    
    # 关闭selinux
    sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
    setenforce 0  # 临时
    
    # 关闭swap
    swapoff -a  # 临时
    sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
    
    # 根据规划设置主机名
    hostnamectl set-hostname <hostname>
    
    # 在master添加hosts (换成自己的IP)
    cat >> /etc/hosts << EOF
    <公网IP1> master 
    <公网IP2> node1
    <公网IP3> node2
    EOF
    
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    # 将桥接的IPv4流量传递到iptables的链
    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system  # 生效
    
    # 时间同步
    yum install ntpdate -y
    ntpdate time.windows.com
    

    2.4 安装安装包(每个主机)

    安装包的下载可能需要配置不同linux包管理工具的国内源,这个自行百度即可解决

    • docker自行下载,唯一要注意的是:选择的CRI容器进行时的cgroups管理器必须是systemd,否则会提示失败,官网详细介绍:https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/

      • 官方推荐kubelet使用systemd驱动,那么我们修改docker的驱动, 修改/etc/docker/daemon.json文件:

        {
            "exec-opts": ["native.cgroupdriver=systemd"]
        }
        
        # 重启docker\kubelet
        systemctl restart docker
        systemctl restart kubelet
        
    • 下载k8s安装工具(版本看自己):

      ubuntu:

      apt-get install -y kubectl=1.23.0-00 kubeadm=1.23.0-00 kubelet=1.23.0-00
      apt-mark hold kubelet kubeadm kubectl  # 锁定版本
      systemctl enable kubelet # 开机启动
      

    2.5 开启云服务器端口(每个主机)

    很重要的一步,如果开启的不好会导致服务无法访问

    控制面/Master

    协议方向端口范围目的使用者
    TCP入站6443Kubernetes API server所有
    TCP入站2379-2380etcd server client APIkube-apiserver, etcd
    TCP入站10250Kubelet API自身, 控制面
    TCP入站10259kube-scheduler自身
    TCP入站10257kube-controller-manager自身

    尽管 etcd 的端口也列举在控制面的部分,但你也可以在外部自己托管 etcd 集群或者自定义端口。

    工作节点

    协议方向端口范围目的使用者
    TCP入站10250Kubelet API自身, 控制面
    TCP入站30000-32767NodePort Services所有

    NodePort Services是pod服务的默认端口范围。这里如果希望Master的IP也可以访问Pod服务,那么也可以给Master主机开放这些端口(建议)

    所有节点

    Flannel网络组件构建Pod之间的通信时需要的配置

    协议方向端口范围作用使用者
    UDP入站8472vxlan Overlay 网络通信Overlay 网络

    2.6 修改启动参数(每个主机)

    修改systemd管理的kubectl, 添加 kubelet的启动参数--node-ip=公网IP, 每个主机都要添加并指定对应的公网ip, 添加了这一步才能使用公网 ip来注册进集群

    sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

    添加--node-ip=<公网IP>

    image-20220122155516765

    重启服务:systemctl daemon-reload

    参数官方解释如下:(设置节点IP,使用默认IP,我们期望使用公网IP)

    --node-ip string      IP address (or comma-separated dual-stack IP addr
    esses) of the node. If unset, kubelet will use the node's default IPv4 address, if any, or its default IPv6 address if it has no IPv4 addresses. You can pass '::' to make it prefer the default IPv6 address rather than the default IPv4 address.   
    

    四、搭建启动

    1. master初始化(master)

    sudo kubeadm init \
    --apiserver-advertise-address=211.159.224.96 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.23.0 \
    --control-plane-endpoint=211.159.224.96 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16
    --v=5
    

    初始化成功后会给出提示,执行以下操作让Master主机上所有用户可以使用kubectl命令

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    并且还给出了其他节点加入集群的命令:

    kubeadm join 211.159.224.96 --token esce21.q6hetwm8si29qxwn \
        --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
    

    如果过期了可以重新获取:

    kubeadm token create --print-join-command 
    

    2. 集群的重置(出错了再执行此步骤)

    如果安装失败想重新安装需要卸载集群

    删除之前的环境(每个节点):

    sudo kubeadm reset				
    rm -rf /root/.kube/
    sudo rm -rf /etc/kubernetes/
    sudo rm -rf /var/lib/kubelet/
    sudo rm -rf /var/lib/dockershim
    sudo rm -rf /var/run/kubernetes
    sudo rm -rf /var/lib/cni
    sudo rm -rf /var/lib/etcd
    sudo rm -rf /etc/cni/net.d
    
    # apt-get --purge remove kubectl kubelet kubeadm  安装包可以不卸载
    

    注意,即使这样也没有删除掉k8s对本机网卡iptables转发的配置,完全的删除还需要执行:

    iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
    ipvsadm -C
    ipvsadm --clear 
    

    执行ifconfig会发现还有一些虚拟vethcniflannel等设备都可以通过ip link delete xxx删除掉

    3. 修改kube-apiserver参数(Master)

    在 master 节点,kube-apiserver 添加--bind-address=0.0.0.0修改--advertise-addres=<公网IP>

    sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
    

    image-20220122160948488

    4. work node加入(work node)

    在每个work node上执行一下上面的join指令即可:

    kubeadm join 211.159.224.96 --token esce21.q6hetwm8si29qxwn \
        --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
    

    5. 安装CNI网络插件(Master)

    使用flannel, 在master节点执行

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

    修改 yaml 配置文件,添加两处地方:

    vi kube-flannel.yml
    
    containers:
          - name: kube-flannel
            image: rancher/mirrored-flannelcni-flannel:v0.16.1
            command:
            - /opt/bin/flanneld
            args:
            - --public-ip=$(PUBLIC_IP)
            - --iface=eth0
            - --ip-masq
            - --kube-subnet-mgr
    
    env:
            - name: PUBLIC_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
    

    安装插件:

    kubectl apply -f kube-flannel.yml
    

    6. 检查状态(Master)

    检查集群状态: kubectl get nodes

    image-20220122161720858

    检查系统Pods状态:

    watch -n 1 kubectl get pod -n kube-system -o wide
    

    image-20220122161812228

    五、测试

    master 节点执行下面命令来部署 nginx

    kubectl create deploy my-nginx --image=nginx
    kubectl expose deploy my-nginx --port=80 --type=NodePort
    

    查看 nginx 部署的 pod 信息,可以看到 Pod ip,以及部署在哪一个节点上

    kubectl get pods -o wide
    

    每一台机子都ping一下Pod的IP,看看是否能Ping通,如果不行,先执行sudo iptables -P FORWARD ACCEPT, 如果还是不行, 那么检查主机的UDP端口8472是否开启

    image-20220122162000026

    测试NodePort:

    kubectl get svc -o wide
    

    image-20220122162244724

    用每个主机的公网IP + 这里的端口号,看看是否都可以访问Nginx服务,如果都可以那么集群就ok了,如果不行就检查端口是否开放(特别是Master)

    六、其他公网组建k8s的解决方案

    1. 内网IP+iptables转发

    使用内网IP与Iptables转发链:https://zhuanlan.zhihu.com/p/410371256

    使用此方法出现的Bug:

    1. 其他服务器内网IP与主机内网docker网桥网段冲突

    注意查看其他公网服务器的内网IP是否会和Master本机的其他内网服务IP冲突,我就是和docker0网桥的Ip冲突,导致即使配置了Iptables转发还是不能ping通

    因为阿里云轻量服务器内网不可修改(云服务器可以改),所以选择了修改docker的默认网桥docker0,修改docker0 IP: (https://www.jianshu.com/p/69fc2d9656e7)

    修改文件 /etc/docker/daemon.json添加内容 “bip”: “ip/netmask” [ 切勿与宿主机同网段 ]

    [root@iZ2ze278r1bks3c1m6jdznZ ~]# cat /etc/docker/daemon.json
    {
     "bip":"192.168.100.1/24"
    }
    

    重启docker服务器

    [root@iZ2ze278r1bks3c1m6jdznZ ~]# systemctl restart docker
    

    2. 使用公网IP配置init启动导致 Initial timeout of 40s passed.

    问题描述:

    master init启动卡在:

    [wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
    [kubelet-check] Initial timeout of 40s passed.
    

    原因:

    因为阿里云主机网络是VPC,公网IP只能在控制台上看到,在系统里面看到的是内部网卡的IP,阿里云采用NAT方式将公网IP映射到ECS的位于私网的网卡上,所以在网卡上看不到公网IP,使用 ifconfig 查看到的也是私有网卡的IP,导致 etcd 无法启动。

    解决:

    使用iptables转发(见上方)

    或者(来自https://zhuanlan.zhihu.com/p/410371256)

    另启一个命令行窗口修改初始化生成的 etcd.yaml 中的配置成示例图一样,进程会自动重试并初始化成功。

    vim /etc/kubernetes/manifests/etcd.yaml

    image-20220121014534357

    3. kubelet与docker驱动不同启动失败

    • 问题描述:

      kubelet启动失败,journalctl -xeu kubelet查看错误信息:

      failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""

    • 原因:

      kubelet与docker的cgroups驱动程序不同

    • 解决:

      配置 cgroup 驱动程序

      官方推荐kubelet使用systemd驱动,那么我们修改docker的驱动, 修改/etc/docker/daemon.json文件:

      {
          "exec-opts": ["native.cgroupdriver=systemd"]
      }
      
      # 重启docker\kubelet
      systemctl restart docker
      systemctl restart kubelet
      

    4. kubelet找不到配置文件

    kubelet启动报错:

    问题描述:failed to load Kubelet config file /var/lib/kubelet/ config.yaml, error failed to read kubelet config file "/var

    原因与解决:新版本需要先kubeadmin init生成对应的配置文件,kubelet才会正常

    展开全文
  • 这两天在搭建K8S服务器,因为我的是两不在同一网段的服务器,遇到了不少大大小小的坑,在多次想放弃的情况下,还是步步艰难排除万难,取得了最终胜利!言归正传,下面一一列举一下,希望对大家有所帮助。 1、...
  • 初始化系统 ...# 关闭防火墙 systemctl stop firewalld ...sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 setenforce 0 # 临时 # 关闭swap swapoff -a # 临时 sed -ri 's/.*swap.*/#&/' /etc/fs
  • centos服务器搭建k8s集群

    千次阅读 2022-04-11 15:30:13
    我这里用到了CentOS7.6服务器3台(2核4G),我是自己在我windows的虚拟机弄了三台centos...这里多啰嗦一句,搭建一台,后面两台直接克隆,这样比较节约时间和精力。看笔记的时候要仔细,一步一步来肯定可以搭建好的。
  • 服务器搭建k8s v1.23.0版本,下面具体的操作会在特殊表明是哪些主机需要的操作。 二、开启云服务器端口 如果开启不全会导致服务无法访问。 2.1 控制平面/Master 协议 方向 端口范围 目的 使用者
  • 基于阿里云ECS服务器搭建k8s集群

    千次阅读 2021-01-28 18:00:46
    此处仅有两台服务器一台master节点,一台node节点,后期可按照步骤继续增加node节点 1. 搭建环境 Master节点: CPU : 2核、内存 :2GiB、 操作系统:Centos7.6 64位、 带宽:1Mbps 服务器公网IP:** 、 私有IP:** ...
  • 本人在项目过程中,搭建K8s集群,可能有去区别其他的实际情况,文档描述了本人遇到的坑,发出来共享,不喜勿喷,谢谢
  • 配置k8s需要几台服务器

    千次阅读 2021-08-11 00:22:48
    配置k8s需要几台服务器 内容精选换换当多台服务器进行分布式训练时,需要通过昇腾软件中的HCCN Tool工具配置NPU卡IP地址(device的网卡IP),用于多台训练服务器间的网络模型参数通过NPU卡上的光口进行传输同步,...
  • centos7与ubuntu搭建k8s集群方案,包含了在k8s中搭建的各种常用微服务与存储。
  • 环境准备 2.1内核参数调整(还没研究作用) cat > k8s.conf 修改主机名 vi /etc/hostname vi /etc/hosts #其中每一台服务器都需要修改,并且要把所有的hostip hostname数据对都写入hosts文件中 #其中hostip如果是...
  • 基于ECS云主机搭建k8s集群-详细过程

    千次阅读 2022-04-30 20:14:49
    Kubernetes集群详细部署过程,K8s避坑记录,快速搭建环境并把主要时间花在专注k8s的学习上
  • su - root 切换用户重新登陆 #每台机器上修改/etc/hosts文件 cat >> /etc/hosts 二、安装kubeadm,kubelet和kubectl 每台服务器上都要安装 #添加kubernetes YUM软件源 [root@localhost ~]# cat > /etc/yum.repos.d/...
  • Docker、k8s、Serverless,工程师们没少听,只不过不同工程师们的对他们的关注程度各不相同,出发点都是希望技术方案能在项目中更好的解决一些实际问题。这些技术即能抹平一些工程师之间的边界,也能加深一些工程师...
  • 自己搭建一k8s环境

    2022-04-07 10:12:12
    背景Kubernetes 是时下流行的容器编排引擎,因为字母太多,且掐头去尾后剩下 8 个字母,于是被大家亲切的缩写为 k8s。Kuberneteshttps://kubernetes.io/另外所谓“云原生”概念火爆,各大云厂商也纷纷推出了自己的...
  • kubeadm 搭建 K8s

    千次阅读 2022-04-17 18:44:14
    本篇主要记录一下 使用 kubeadm 搭建 k8s 详细过程 ,环境使用 VirtualBox 构建的3虚拟机 1.环境准备 操作系统:Centos7 (CentOS Linux release 7.9.2009) Master 主节点: 1 虚拟机 Node 计算节点: 2 ...
  • 搭建k8s服务器硬件选型

    千次阅读 2020-11-16 17:49:09
    前言 为了能够搭建高效、稳定、安全的k8s高可用系统,需对服务器各项要素,进行周到的考虑 集群规划 创建k8s集群时,不宜使用多而小的服务器...2.容器在一台服务器内建立通信的比例增大,减少网络传输 3.拉取镜像的效率
  • K8s部署

    2021-09-29 18:08:54
    单机k8s环境 基本配置 内容 参数 操作系统 centos7 机器环境 VMware虚拟机 部署目标 Nginx任意版本 虚拟机配置 内容 参数 网卡模式 NAT CPU核心数 2 内存 4G 基本安装 安装docker 环境准备 [root@ruozedata001 ...
  • Ansible搭建K8S说明

    千次阅读 2021-11-29 10:55:36
    kubernetes可以实现容器集群的自动化部署。本篇文章以kubernetes1.14.0为例,介绍如何使用ansible进行K8S三台服务器非高可用的一键式离线安装。
  • k8s之DNS服务器搭建

    2021-06-16 00:45:36
    、导读在使用k8s部署springboot+redis简单应用这篇文章中,spring boot连接redis是直接使用的IP连接,那么可不可以直接使用服务名称进行连接呢?答案是可以的,...
  • 都是个人实验测试,仅供参考。基于两服务器,内网无法互相ping...立即在另个窗口编辑修改 vim /etc/kubernetes/manifests/etcd.yaml 如下 # 也就是将多余的公网ip删除,将公网ip改为127 - --listen-client-urls=...
  • 基于centos8 搭建k8s集群

    千次阅读 2022-02-18 13:10:11
    k8s 192.168.157.11 master CentOS Stream release 8 3:20.10.9-3.el8 1.22.3 192.168.157.12 node1 CentOS Stream release 8 3:20.10.9-3.el8 1.22.3 192.168.157.13 node2 CentOS Stream release 8 3:...
  • 最近用腾讯云服务器搭建k8s集群,踩到个巨坑。现象就是服务正常搭建完毕,各个必须的pod也处于ready状态,但是node不能访问别的node的pod。搭建的示例tomcat的demo也不能通过外网正常访问。 后面发现得设置...
  • 在Linux公网、云服务器搭建K8s集群

    千次阅读 热门讨论 2021-02-08 10:42:24
    解决公网环境节点间无法互通问题 内、公网配置差异总结 Rancher安装 参考链接 前言 本文讲述在Linux公网、云服务器搭建K8s集群详细步骤,解决搭建过程中的问题。 脚本基本可以不修改直接使用。 准备工作 需要Linux ...
  • 在Linux内网搭建K8s集群

    千次阅读 2021-09-27 15:39:13
    Rancher安装 参考链接 前言 本文讲述在Linux内网搭建K8s集群详细步骤,解决搭建过程中的问题。 脚本基本可以不修改直接使用。 准备工作 需要Linux CentOS 7.x 两及以上,本文用的 7.6。 主机要求有2个核心及以上。...
  • 虚拟机搭建k8s集群

    千次阅读 2022-01-12 18:20:13
    虚拟机搭建k8s集群虚拟机搭建k8s集群机器资源介绍机器时间同步修改/etc/hosts文件关闭防火墙,开机不自启动禁用selinux关闭swap修改/etc/sysctl.conf文件配置ipvs功能添加需要加载的模块写入脚本文件docker安装安装...
  • 注意:(后来由于NAT模式,开了端口也不能ping同,选择桥接模式的话,每次更换网络宿主机IP地址都会变,因此,选择了在一台物理机上搭建) 一:基础环境配置 (1)两台物理机配置(全新): CPU:i7-7700 ...
  • 二进制方式搭建k8s集群

    千次阅读 2021-01-29 20:37:24
    使用二进制方式搭建K8S集群 k8s架构 k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求 master节点上的主要组件包括: 1、kube-apiserver:集群控制的入口,提供 HTTP REST 服务,同时交给etcd...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,423
精华内容 2,969
关键字:

一台服务器搭建k8s

友情链接: excel-demo.rar