zoukankan      html  css  js  c++  java
  • k8s使用

    配置k8s环境:

    需要三台服务器。一个作为master,另外两个作为node1,node2  (本次测试使用的是三台centos7服务器)

    1.分别修改三台服务器的主机名

    # hostnamectl set-hostname  master

    # hostnamectl set-hostname  node1

    # hostnamectl set-hostname  node2

    也可直接修改主机名文件,vi /etc/hostname

    修改/etc/hosts 文件(三台服务器hosts文件都一样)

    2.时间校对(三台机器都做时间校对)
    a,[root@master ~]# ntpdate ntp1.aliyun.com
    13 Sep 14:48:02 ntpdate[1596]: adjust time server 120.25.115.20 offset -0.015854 sec
     
    [root@master ~]# hwclock
    2018年09月13日 星期四 14时49分51秒  -0.646898 秒
     
     Kubernetes是分布式的,各个节点系统时间需要同步对应上。
    b.yum -y install chrony
    systemctl enable chronyd.service && systemctl start chronyd.service && systemctl status chronyd.service
    chronyc sources
    上述a b 两种使用其中一种即可
     
    3.关闭CentOS7自带的防火墙服务(三台都需要做)
    systemctl disable firewalld
    systemctl stop firewalld
     
    关闭 selinux(三台都需要做)
    setenforce 0
    sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
    sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux
    sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config

    关闭swap(三台都需要做)

     swapoff -a
    sed -i 's/.*swap.*/#&/' /etc/fstab
     
    4.配置内核参数
    cat > /etc/sysctl.d/k8s.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl -p /etc/sysctl.d/k8s.conf
    echo "* soft nofile 655360" >> /etc/security/limits.conf
    echo "* hard nofile 655360" >> /etc/security/limits.conf
    echo "* soft nproc 655360" >> /etc/security/limits.conf
    echo "* hard nproc 655360" >> /etc/security/limits.conf
    echo "* soft memlock unlimited" >> /etc/security/limits.conf echo "* hard memlock unlimited" >> /etc/security/limits.conf
    echo "DefaultLimitNOFILE=1024000" >> /etc/systemd/system.conf
    echo "DefaultLimitNPROC=1024000" >> /etc/systemd/system.conf
     
    执行 ulimit -Hn
    看下最大文件打开数是否是655360 ,如果不是,尝试重新连接终端。
     
    5、配置节点间ssh互信

    配置ssh互信,那么节点之间就能无密访问,方便日后执行自动化部署

    ssh-keygen # 每台机器执行这个命令, 一路回车即可  (生成公钥和私钥

    公钥和私钥路径/root/.ssh/

     到master上拷贝公钥到其他节点

     scp  id_rsa.pub  node1:/root/.ssh/  
     scp  id_rsa.pub  node2:/root/.ssh/  
     
    开始安装相关工具:
    1、部署docker
    配置docker镜像:
    # wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    安装docker 指定18.06.1:

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

    yum install -y docker(直接安装默认版本docker)

    启动docker:

    systemctl daemon-reload && systemctl restart docker && systemctl enable docker && systemctl status docker

     
     
    2、安装安装kubeadm、kubelet、kubectl

    这一步是所有节点都得安装(包括node节点)
    工具说明

      • kubeadm: 部署集群用的命令
      • kubelet: 在集群中每台机器上都要运行的组件,负责管理pod、容器的生命周期
      • kubectl: 集群管理工具
     要想安装kubeadm、kubelet、kubectl工具,需要先配置相关的 kubernetes仓库(手动创建一个文件)

    /etc/yum.repos.d 目录下创建   kubernetes.repo  内容如下:

    [root@master yum.repos.d]# vim kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 

    yum 安装 并启动:

    不指定版本安装:

    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

    systemctl enable kubelet && systemctl start kubelet

    还可以指定版本安装:

    # yum -y install kubelet-1.14.0 kubeadm-1.14.0 kubectl-1.14.0 --disableexcludes=kubernetes

    注意:kubelet 服务会暂时启动不了,先不用管它。
     
     
    3、镜像下载准备:
    使用kubeadm来搭建Kubernetes,那么就需要下载得到Kubernetes运行的对应基础镜像
    也可以执行 kubeadm config images list 命令查看依赖需要安装的镜像列表

     

    kubeadm采取pod,即容器的方式部署k8s的各个组件,所以需要拉取各个组件的镜像,然而,官方的镜像隶属于k8s.gcr.io镜像库,由于不可描述的原因,哈哈,没法拉取,所以这里预先拉取阿里云的镜像,再修改tag

    kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

    将拉下的镜像 registry.aliyuncs.com/google_containers/etcd:3.4.13-0 更改名为 k8s.gcr.io/etcd:3.4.3-0

    docker tag 容器id  k8s.gcr.io/etcd:3.4.3-0    给镜像改名

    docker rmi   registry.aliyuncs.com/google_containers/etcd:3.4.13-0      删除改名前的镜像

    可以使用下面脚本直接修改tag:

    #!/bin/bash

    newtag=k8s.gcr.io
    for i in $(docker images | grep -v TAG |awk '{print $1 ":" $2}')
    do
    image=$(echo $i | awk -F '/' '{print $3}')
    docker tag $i $newtag/$image
    docker rmi $i
    done

    也可手动直接拉取镜像:

    docker pull registry.aliyuncs.com/google_containers/etcd:3.4.13-0

     
    4、部分需要的配置
    a. 保证输出的都是1  (该选项在环境配置中的内核配置)
    [root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
    1
    [root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
    1
    b.修改配置文件
    [root@master ~]# vim /etc/sysconfig/kubelet
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
     
     
     5、部署master节点

    kubeadm init 初始化master节点

    # kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.0.249 --ignore-preflight-errors=Swap

    # kubeadm version    查看kubernetes-version版本

    • -- image-repository: 设置目标镜像仓库,默认的镜像仓库被墙无法访问

    • -- kubernetes-version:设置kubernetes版本

    • --pod-network-cidr:设置PodIP所在的网段,由于后面使用flannel插件,必须设置成10.244.0.0/16

    • --service-cidr: 设置Service ClusterIP所在的网段

    • --apiserver-advertise-address 设置apiserver的ip地址,多网卡的情况下建议配置成局域网IP

    • --ignore-preflight-errors=Swap 当服务器Swap启用时,忽略该错误继续执行

    执行成功后,记下执行过程日志中的如下一段,这段内容记录了注册到Master节点用到的token和秘钥,在添加从节点需要用到

    kubeadm join 192.168.0.249:6443 --token 6kdn14.9htpf29ckrx9leyq  --discovery-token-ca-cert-hash sha256:96c599c3caa54f2367f19e0bcf23d3df2f14014dd51fb1ee325c25a0d05e714c

    使用如下命令初始化成功:(第一次使用上面命令初始化成功,第二次使用如下命令初始化成功。未能找到原因)

    kubeadm init --image-repository "k8s.gcr.io" --kubernetes-version "v1.19.3" --pod-network-cidr="10.244.0.0/16"
    --service-cidr="10.96.0.0/12" --apiserver-advertise-address="192.168.0.201" --ignore-preflight-errors=Swap

     配置kubectl命令(初始化kubectl

     根据kubeadm init 完成后的提示,执行如下操作

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

    获取pods列表命令
    其中coredns pod处于Pending状态,这个先不管

    kubectl get pods --all-namespaces

     查看集群的健康状态:  $ kubectl get cs

    若出现不健康参考:https://www.cnblogs.com/wuliping/p/13780147.html

    kubectl get cs
     

     6、安装flannel网络插件(master机器上)用来配置pod网段

     # kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    (下载kube-flannel.yml插件需要FQ)
     
    通过下面命令不需要FQ,可以直接下载

    wget https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml -O ${KUBE_YAML_DIR}/kube-flannel.yml    --no-check-certificate

    如果部署机器存在多网卡(例如VirtualBox虚拟机),需要修改kube-flannel.yml,在容器的启动命令参数中指定网卡名称“- --iface=eth1”
     

     本次安装由于无法FQ,同事给我一个kube-flannel.yml 文件,直接复制到虚拟机中的 /root/.kube  目录下

    镜像需要改一下:改成quay.io/coreos/flannel:v0.11.0-amd64  (多个地方都需要改过来)

    查看flannel插件是否安装成功

    #kubectl -n kube-system get po -l app=flannel -o wide

    在master上需要 docker pull  quay.io/coreos/flannel:v0.11.0-amd64    镜像

     备注:还可以使用 calico网络  具体使用方法参考 https://blog.csdn.net/xixihahalelehehe/article/details/105567076

    7、部署node节点

     node上也是需要下载安装一些镜像的,

    需要下载的镜像为:kubeadm config images list  查看部分镜像版本(kube-apiserver、kube-controller-manager、kube-scheduler 、etcd、coredns   node节点不需要下载,只是master节点需要下载)

    kube-proxy:v1.13、pause:3.2   

    docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.19.2

    docker pull registry.aliyuncs.com/google_containers/pause:3.2

    docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.19.2  k8s.gcr.io/kubeproxy:v1.19.2

    docker tag registry.aliyuncs.com/google_containers/pause:3.2  k8s.gcr.io/pause:3.2

    docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.19.2

    docker rmi registry.aliyuncs.com/google_containers/pause:3.2

    此处使用的pod 网络插件 flannel    在node节点不需要下载相关镜像( quay.io/coreos/flannel:v0.11.0-amd64  ),会自动自己下载   。

    只需要在master上下载镜像即可

    8、添加从节点(把node加入集群里 (kubeadm init 生成的一段))

    执行以下命令需要先执行第2步骤 安装安装kubeadm、kubelet、kubectl  然后
    在每个Node节点上执行,并注册到主节点:
     

    kubeadm join 192.168.0.249:6443 --token 6kdn14.9htpf29ckrx9leyq
    --discovery-token-ca-cert-hash
    sha256:96c599c3caa54f2367f19e0bcf23d3df2f14014dd51fb1ee325c25a0d05e714c --ignore-preflight-errors=Swap

     

     

     9、验证测试

    在 master上执行:

    # kubectl get nodes

     

     节点都显示为NotReady,使用 vim /var/lib/kubelet/kubeadm-flags.env,编辑配置文件,删除掉--network-plugin=cni

    master节点和node节点都删除掉--network-plugin=cni

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

     

     
     
     

     

  • 相关阅读:
    hdu 3746 Cyclic Nacklace
    hdu 3336 Count the string
    hdu 1358 Period
    hiho一下 第一周 最长回文子串
    KMP算法详解
    Java 之 static的使用方法(6)
    Jave 之方法-函数(5)
    Java 之数组(4)
    大数据-storm学习资料视频
    大数据-spark-hbase-hive等学习视频资料
  • 原文地址:https://www.cnblogs.com/mayyan/p/13813976.html
Copyright © 2011-2022 走看看