zoukankan      html  css  js  c++  java
  • 容器云----kubernetes+docker-ce

    容器云kubernetes+docker-ce

    设备列表

    master:172.22.6.241

    node1:172.22.6.242

    node1:172.22.6.243

    node1:172.22.6.244

    版本

    kubernetes:v1.10.0

    docker-ce:17.03.3-ce

    一.基础环境配置(全部机器配置)

    关闭防火墙和selinux

    systemctl stop firewalld

    systemctl disabled firewalld

    setenforce 0

    关闭swap

    swapoff -a

    配置内核参数

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

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

    sysctl -p

    配置docker-ceyum

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

    配置kubernetesyum

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

    [kubernetes]

    name=Kubernetes

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

    enabled=1

    gpgcheck=0

    EOF

    安装docker

    yum list docker-ce --showduplicates  查看可用的docker-ce版本

    yum install  -y  --setopt=obsoletes=0    docker-ce-17.03.3.ce-1.el7.x86_64  docker-ce-selinux-17.03.3.ce-1.el7.noarch(此参数为取消安装包取代关系,有时候有些旧的安装包被新的安装包取代了,安装的时候就会自动安装新的,但是我们需要沿用指定版本的docker以保证Kubernetes的稳定性)

    查看dockercgroup模式

    docker info | grep cgroup

    修改kubeletcgroup模式是否为与docker一致,否则需要改成一致

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

    environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

    重启kubelet

    systemctl enable kubelet && systemctl start kubelet

    安装kubernetes组件

    yum install kubelet-1.10.0 kubeadm-1.10.0 kubernetes-cni

    二.编辑脚本,下载kubernetes镜像

    #!/bin/bash
    images=(kube-proxy-amd64:v1.10.0 kube-scheduler-amd64:v1.10.0 kube-controller-manager-amd64:v1.10.0 kube-apiserver-amd64:v1.10.0
    etcd-amd64:3.1.12 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8
    k8s-dns-dnsmasq-nanny-amd64:1.14.8)
    for imageName in ${images[@]} ; do
      docker pull keveon/$imageName
      docker tag keveon/$imageName k8s.gcr.io/$imageName
      docker rmi keveon/$imageName
    done

    执行脚本

    三.初始化kubernetes集群(master集群)

    初始化集群

    kubeadm init --kubernetes-version=v1.10.0 --pod-network-cidr=10.244.0.0/16

    安装成功后会有如下命令提示(这个提示是帮助你后续把nodes加进集群中的,请务必记录下来。)

    kubeadm join 172.22.6.241:6443 --token 9xsiga.f2cg1zzjyj8m5sqm --discovery-token-ca-cert-hash sha256:c21573b14c24b61ff55d76340fc22515e853c32a20bff7e45426c83fe5840e33

    初始化失败或者想重装,可以重置集群。

    kubeadm reset

    设置kubernetes配置文件

    # 对于非root用户

    mkdir -p $HOME/.kube

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

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

    # 对于root用户

    export KUBECONFIG=/etc/kubernetes/admin.conf

    也可以直接放到~/.bash_profile

    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >>  /etc/profile

    source /etc/profile

    安装flannel网络

    配置kubernetes网络环境

    mkdir   /etc/cni/net.d/  -p

    cat <<EOF> /etc/cni/net.d/10-flannel.conf

    {

      "name": "cbr0",

      "type": "flannel",

      "delegate": {

        "isDefaultGateway": true

      }

    }

    EOF

    配置flannel网络环境

    mkdir /run/flannel/

    cat <<EOF> /run/flannel/subnet.env

    FLANNEL_NETWORK=10.244.0.0/16

    FLANNEL_SUBNET=10.244.1.0/24

    FLANNEL_MTU=1450

    FLANNEL_IPMASQ=true

    EOF

    创建oci网络模型目录

    mkdir /usr/share/oci-umount/oci-umount.d -p

    编写flannalyml文件

    这个可以直接用网上提供的yaml

    kubectl  apply  -f  ./kubernetes-flannel.yml

    也可以自己编写yaml文件

    vim  kubernetes-flannel.yml

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: flannel
    rules:
      - apiGroups:
          - ""
        resources:
          - pods
        verbs:
          - get
      - apiGroups:
          - ""
        resources:
          - nodes
        verbs:
          - list
          - watch
      - apiGroups:
          - ""
        resources:
          - nodes/status
        verbs:
          - patch
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    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",
          "type": "flannel",
          "delegate": {
            "isDefaultGateway": true
          }
        }
      net-conf.json: |
        {
          "Network": "10.244.0.0/16",
          "Backend": {
            "Type": "vxlan"
          }
        }
    ---
    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: kube-flannel-ds
      namespace: kube-system
      labels:
        tier: node
        app: flannel
    spec:
      template:
        metadata:
          labels:
            tier: node
            app: flannel
        spec:
          hostNetwork: true
          nodeSelector:
            beta.kubernetes.io/arch: amd64
          tolerations:
          - key: node-role.kubernetes.io/master
            operator: Exists
            effect: NoSchedule
          serviceAccountName: flannel
          initContainers:
          - name: install-cni
            image: quay.io/coreos/flannel:v0.9.1-amd64
            command:
            - cp
            args:
            - -f
            - /etc/kube-flannel/cni-conf.json
            - /etc/cni/net.d/10-flannel.conf
            volumeMounts:
            - name: cni
              mountPath: /etc/cni/net.d
            - name: flannel-cfg
              mountPath: /etc/kube-flannel/
          containers:
          - name: kube-flannel
            image: quay.io/coreos/flannel:v0.9.1-amd64
            command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr" ]
            securityContext:
              privileged: true
            env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            volumeMounts:
            - name: run
              mountPath: /run
            - name: flannel-cfg
              mountPath: /etc/kube-flannel/
          volumes:
            - name: run
              hostPath:
                path: /run
            - name: cni
              hostPath:
                path: /etc/cni/net.d
            - name: flannel-cfg
              configMap:
                name: kube-flannel-cfg

    kubectl  apply  -f  ./kubernetes-flannel.yml

    四:添加节点(node节点)

    删除kubernetes中的网络传参(当你的kubelet无法正常启动的时候才进行此操作)

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

    删除/etc/systemd/system/kubelet.service.d/10-kubeadm.conf里最后一行里的$KUBELET_NETWORK_ARGS

    添加节点(这个是master初始化成功的时候提示出来的命令)

    kubeadm join 172.22.6.241:6443 --token 9xsiga.f2cg1zzjyj8m5sqm --discovery-token-ca-cert-hash sha256:c21573b14c24b61ff55d76340fc22515e853c32a20bff7e45426c83fe5840e33

    如有提示说找不到dockerpid文件,添加如下参数

    --ignore-preflight-errors=cri

    五.查看集群状态

    查看集群节点状态

    kubectl get nodes --all-namespaces

    NAME    STATUS   ROLES    AGE   VERSION
    yun01   Ready    master   3d    v1.10.0
    yun02   Ready    <none>   3d    v1.10.0
    yun03   Ready    <none>   3d    v1.10.0
    yun04   Ready    <none>   3d    v1.10.0

    查看集群pod状态

    kubectl get svc,pods --all-namespaces

    NAMESPACE     NAME                                    TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
    default       service/kubernetes                      ClusterIP   10.96.0.1     <none>        443/TCP          3d
    kube-system   service/kube-dns                        ClusterIP   10.96.0.10    <none>        53/UDP,53/TCP    3d
    kube-system   service/kubernetes-dashboard-external   NodePort    10.96.28.16   <none>        9090:30090/TCP   3d
    
    NAMESPACE     NAME                                        READY   STATUS    RESTARTS   AGE
    kube-system   pod/etcd-yun01                              1/1     Running   4          3d
    kube-system   pod/kube-apiserver-yun01                    1/1     Running   5          3d
    kube-system   pod/kube-controller-manager-yun01           1/1     Running   4          3d
    kube-system   pod/kube-dns-86f4d74b45-r95sl               3/3     Running   11         3d
    kube-system   pod/kube-flannel-ds-kprjb                   1/1     Running   2          3d
    kube-system   pod/kube-flannel-ds-m264m                   1/1     Running   3          3d
    kube-system   pod/kube-flannel-ds-wk2f7                   1/1     Running   5          3d
    kube-system   pod/kube-flannel-ds-zq5km                   1/1     Running   2          3d
    kube-system   pod/kube-proxy-cj6vj                        1/1     Running   4          3d
    kube-system   pod/kube-proxy-ff4cf                        1/1     Running   4          3d
    kube-system   pod/kube-proxy-q6pjl                        1/1     Running   3          3d
    kube-system   pod/kube-proxy-wbthp                        1/1     Running   2          3d
    kube-system   pod/kube-scheduler-yun01                    1/1     Running   4          3d
    kube-system   pod/kubernetes-dashboard-5cc6564db9-m98fw   1/1     Running   4          3d

    至此,kubernetes集群搭建完成。

    参考:

    http://blog.51cto.com/devingeng/2096495

    转载请注明出处。

  • 相关阅读:
    以太坊编程简单介绍 ,Part-1
    以太坊可更新智能合约研究与开发综述
    为你的以太坊应用程序设计架构
    货币的未来取决于打破关于货币历史的虚构谎言
    JVM调优:GC 参数
    JVM调优:GC 参数
    Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法
    Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法
    Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法
    Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法
  • 原文地址:https://www.cnblogs.com/QicongLiang/p/9953324.html
Copyright © 2011-2022 走看看