美文网首页Kubernetes程序员首页投稿(暂停使用,暂停投稿)
一步步打造专属于自己的Kubernetes-1.8.4集群环境

一步步打造专属于自己的Kubernetes-1.8.4集群环境

作者: 胖宝宝王 | 来源:发表于2017-12-08 00:01 被阅读704次

    一 kubernetes

    kubernetes

    以下介绍摘自Wiki
    Kubernetes (通常称为K8s) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用的。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker等。

    本文主要介绍如何使用kubeadm快速搭建K8s集群环境,让你迅速体验学习Kubernetes。

    更多内容查阅官网K8s.io


    二 实验环境

    硬件

    宿主机:Win10 + Virtualbox
    虚拟机:2核4g + 桥接网卡

    主机名 系统 IP
    master.k8s CentOS 7.4 x86_64 192.168.1.100
    node1.k8s CentOS 7.4 x86_64 192.168.1.101
    node2.k8s CentOS 7.4 x86_64 192.168.1.102

    软件

    软件包 版本
    kubeadm v1.8.4
    kubelet v1.8.4
    kubectl v1.8.4
    kubernetes-cni 0.5.1
    docker 1.12.6

    上述安装包已经上传百度云,下载链接: https://pan.baidu.com/s/1c2NJADy 密码: dfgq

    镜像

    Kubeadm初始化中会从gcr.io中下载很多镜像。如果是在国内(无奈的FUC~K),只得另辟蹊径,自找出路。我是将镜像同步到了Docker Hub,然后从docker hub 下载,再tag回来。

    镜像名称 仓库 备注
    kube-proxy-amd64:v1.8.4 gcr.io/google_containers/ FQ
    kube-scheduler-amd64:v1.8.4 gcr.io/google_containers/ FQ
    kube-controller-manager-amd64:v1.8.4 gcr.io/google_containers/ FQ
    kube-apiserver-amd64:v1.8.4 gcr.io/google_containers/ FQ
    etcd-amd64:3.0.17 gcr.io/google_containers/ FQ
    k8s-dns-sidecar-amd64:1.14.5 gcr.io/google_containers/ FQ
    pause-amd64:3.0 gcr.io/google_containers/ FQ
    k8s-dns-kube-dns-amd64:1.14.5 gcr.io/google_containers/ FQ
    k8s-dns-dnsmasq-nanny-amd64:1.14.5 gcr.io/google_containers/ FQ
    flannel:v0.9.1-amd64 quay.io/coreos 正常访问

    三 all节点

    下列操作在所有节点以root用户执行。

    3.1 更新系统

    yum makecache fast
    yum -y update
    

    3.2 停用SWAP分区

    临时停止,重启无效:
    # swapoff -a

    永久关闭:

    1. 删除SWAP分区
    2. 修改/etc/default/grub,找到GRUB_CMDLINE_LINUX并删除swap
    3. 备份/etc/grub2.cfg
    4. 重新生成/etc/grub2.cfg
    

    3.3 关闭SELinux

    临时停止,重启无效:
    # setenforce 0

    永久关闭:
    修改/etc/selinux/config,然后重启系统。

    3.4 设置内核参数

    cat <<EOF > /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system
    

    3.5 安装kubeadm等包

    将下载好的包上传至系统目录,这里是/opt/soft/

    执行安装命令:yum localinstall -y /opt/soft/*.rpm

    3.6 开启firewalld

    systemctl restart firewalld
    systemctl enable firewalld
    

    3.7 加速docker pull

    由于大部分源都在国外,国内下载体验很不好,所以需要设置docker加速器。

    常用的有:

    1. Daocloud 加速
    2. aliyun 加速

    这里使用Daocloud

    3.8 调整kubelet启动参数

    这一步很关键,在没有调整kubelet启动参数之前,我初始化K8s cluster后,在 /var/log/message 中频繁出现以下错误信息:

    Nov 28 09:29:03 k8s kubelet: E1128 09:29:03.679613    6485 summary.go:92] Failed to get system container stats for "/system.slice/kubelet.service": failed to get cgroup stats for "/system.slice/kubelet.service": failed to get container info for "/system.slice/kubelet.service": unknown container "/system.slice/kubelet.service"
    Nov 28 09:29:03 k8s kubelet: E1128 09:29:03.679651    6485 summary.go:92] Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system.slice/docker.service": failed to get container info for "/system.slice/docker.service": unknown container "/system.slice/docker.service"
    Nov 28 09:29:03 k8s kubelet: W1128 09:29:03.679695    6485 helpers.go:847] eviction manager: no observation found for eviction signal allocatableNodeFs.available
    
    

    后来在 stackoverflow 上找到了同问题的解决办法,就是调整启动参数:

    编辑配置文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

    新增: Environment="KUBELET_MY_ARGS=--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"
    
    修改ExecStart: 在末尾新增 $KUBELET_MY_ARGS
    

    问题地址: https://stackoverflow.com/questions/46726216/kubelet-fails-to-get-cgroup-stats-for-docker-and-kubelet-services

    3.9 下载镜像

    从docker hub中下载所需镜像,并重新tag

    images=(kube-proxy-amd64:v1.8.4 kube-scheduler-amd64:v1.8.4 kube-controller-manager-amd64:v1.8.4 kube-apiserver-amd64:v1.8.4 etcd-amd64:3.0.17 k8s-dns-sidecar-amd64:1.14.5 pause-amd64:3.0 k8s-dns-kube-dns-amd64:1.14.5 k8s-dns-dnsmasq-nanny-amd64:1.14.5) 
    
    for imageName in ${images[@]} ; do
      docker pull yotoobo/$imageName
      docker tag  yotoobo/$imageName gcr.io/google_containers/$imageName
      docker rmi  yotoobo/$imageName
    done
    

    3.10 修改/etc/hosts

    由于没有内网dns服务,所以这里使用hosts文件。

    添加以下内容到/etc/hosts

    192.168.1.100 master.k8s
    192.168.1.101 node1.k8s
    192.168.1.102 node2.k8s
    

    四 master节点

    下列操作在master节点以root用户执行。

    4.1 允许指定端口访问

    firewall-cmd --permanent --add-port=6443/tcp
    firewall-cmd --permanent --add-port=2379-2380/tcp
    firewall-cmd --permanent --add-port=10250/tcp
    firewall-cmd --permanent --add-port=10251/tcp
    firewall-cmd --permanent --add-port=10252/tcp
    firewall-cmd --permanent --add-port=10255/tcp
    firewall-cmd --reload
    

    端口作用:

    端口 目的
    6443 kube-apiserver
    2379-2380 etcd server client API
    10250 kubelet api
    10251 kube-scheduler
    10252 kube-controller-manager
    10255 Read-only Kubelet API

    4.2 启动服务

    systemctl enable kubelet && systemctl restart kubelet
    systemctl enable docker && systemctl restart docker
    
    

    4.3 kubeadm 初始化

    kubeadm init --kubernetes-version=v1.8.4 --token-ttl 0 --pod-network-cidr=10.244.0.0/16
    

    --kubernetes-version=v1.8.4 :不指定会去google获取版本信息,所以你懂的~~~
    --token-ttl 0 :token永不过期,不指定默认24h后过期
    --pod-network-cidr=10.244.0.0/16 :如果要正常使用Flannel,则确保使用此配置

    接着等待初始化完成

    kubeadm-init

    如果看到提示1,则说明初始化成功,恭喜,你已经成功了90%了。

    按照提示2执行对应操作。

    提示3则非常重要了,要妥善保存好,以后添加node机到K8s集群就需要它了。

    4.4 安装Flannel

    K8s有许多可选的Pod Network,这里选择Coreos的Flannel

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

    4.5 查看master状态

    get-info

    五 nodes节点

    下列操作在nodes节点以root用户执行。

    5.1 允许指定端口

    firewall-cmd --permanent --add-port=10250/tcp
    firewall-cmd --permanent --add-port=10255/tcp
    firewall-cmd --permanent --add-port=30000-32767/tcp
    firewall-cmd --reload
    

    30000-32767为NodeService的默认端口

    5.2 启动服务

    systemctl enable kubelet && systemctl restart kubelet
    systemctl enable docker && systemctl restart docker
    

    5.3 kubeadm join

    使用步骤4.3中的提示3,将nodes节点添加到K8s集群中。

    kubeadm-join

    最后

    至此,我们借助Kubeadm搭建了一套3节点的集群环境,不过需要指出的是Kubeadm还是一个beta版工具,还不建议在生产环境中使用。因为master节点、etcd、kube-apiserver等都还属于单节点。

    现在,回到master机器上,再来验证下K8s环境:

    get-info2

    在创建一个简单的Pod:

    cat >> /opt/k8s/myapp-pod.yml << EOF
    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: busybox
        command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
    EOF
    
    kubectl apply -f /opt/k8s/myapp-pod.yml
    

    验证:

    pod-info

    K8s还有许许多多的特性和功能,在深入学习中你会发现K8s是如此的强大而富有魅力。

    奔跑的K8s!!!

    同时此文章也发布在了我的个人博客,希望大家可以多多光顾。

    相关文章

      网友评论

        本文标题:一步步打造专属于自己的Kubernetes-1.8.4集群环境

        本文链接:https://www.haomeiwen.com/subject/rujsixtx.html