手记

kubernetes 安装实践

初次接触kubernetes,以此来记录集群部署的过程!!!

一、配置环境
  • 节点清单

主机名IP安装组件说明
k8s-master192.168.1.5kubelet ,kubectl,kubeadmmaster节点
k8s-node1192.168.1.6
node节点
  • 版本信息

    $ cat /etc/redhat-release 
    CentOS Linux release 7.3.1611 (Core)
    $ docker versionClient:Version:         1.12.6API version:     1.24Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
    Go version:      go1.7.4Git commit:      88a4867/1.12.6Built:           Mon Jul  3 16:02:02 2017OS/Arch:         linux/amd64Server:Version:         1.12.6API version:     1.24Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
    Go version:      go1.7.4Git commit:      88a4867/1.12.6Built:           Mon Jul  3 16:02:02 2017OS/Arch:         linux/amd64
    $ kubeadm version
    kubeadm version: &version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.3",       GitCommit:"2c2fe6e8278a5db2d15a013987b53968c743f2a1", GitTreeState:"clean", BuildDate:"2017-08-03T06:43:48Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
     $ kubelet --version
     Kubernetes v1.7.3
    gcr.io/google_containers/kube-apiserver-amd64            v1.7.3             
    gcr.io/google_containers/kube-controller-manager-amd64   v1.7.3              
    gcr.io/google_containers/kube-scheduler-amd64            v1.7.3              
    gcr.io/google_containers/kube-proxy-amd64                v1.7.3                
    quay.io/coreos/flannel                                   v0.8.0-amd64        
    gcr.io/google_containers/etcd-amd64                      3.0.17              
    gcr.io/google_containers/pause-amd64                     3.0     
    gcr.io/google_containers/k8s-dns-kube-dns-amd64          1.14.4             
    gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64     1.14.4
    gcr.io/google_containers/k8s-dns-sidecar-amd64           1.14.4
    • gcr.io镜像

    • kubelet版本:v1.7.3

    • kubeadm版本:v1.7.3

    • docker 版本:1.12.6

    • Linux 版本 : CentOS Linux release 7.3.1611 (Core)

  • 系统设置

    systemctl stop firewalld
    systemctl disable firewalld
    $ /usr/sbin/sestatus -v 
    $ vi /etc/selinux/config
    SELINUX=disabled
    $ vi /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1$ sysctl -p /etc/sysctl.d/k8s.conf
    $ vi /etc/hosts 
    127.0.0.1   localhost k8s-master localhost4 localhost4.localdomain4::1         localhost k8s-master localhost6 localhost6.localdomain6
    $ vi /etc/hostname
    k8s-master
    $ reboot
    • 重启主机

    • 修改hostname

    • 所有节点上设置iptables参数

    • 关闭所有节点SELinux

    • 关闭所有节点防火墙

  • 常见问题处理

    修改 Linux 内核文件 sysctl  -P 报错
    $ sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables:没有那个文件或目录 modprobe bridge lsmod|grep bridge

二、安装组件
  • 安装docker

    $ yum intsall -y docker
    $ systemctl enable docker.service 
    $ systemctl start docker
    • 启动服务

    • yum 安装

  • 安装kubernetes

    $ cat >> /etc/yum.repos.d/kubernetes.repo <<EOF
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=0
    EOF
    $ yum install -y kubelet kubeadm kubectl
    • 配置kubectl

    • yum 安装

    • 配置yum源

  $ kubectl cluster-info
  • 启动kubelet

$ systemctl enable kubelet.service
  • 拉取镜像

由于从国外拉取镜像比较坑,从阿里云获取kubernetes 所需的镜像

#!/bin/bashset -o errexitset -o nounsetset -o pipefail

KUBE_VERSION=v1.7.3
KUBE_PAUSE_VERSION=3.0
ETCD_VERSION=3.0.17
DNS_VERSION=1.14.4
FINANNEL_VERSION=v0.8.0-amd64

GCR_URL=gcr.io/google_containers
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/kubernetes_kubeadm

images=(kube-proxy-amd64:${KUBE_VERSION}kube-scheduler-amd64:${KUBE_VERSION}kube-controller-manager-amd64:${KUBE_VERSION}kube-apiserver-amd64:${KUBE_VERSION}pause-amd64:${KUBE_PAUSE_VERSION}etcd-amd64:${ETCD_VERSION}k8s-dns-sidecar-amd64:${DNS_VERSION}k8s-dns-kube-dns-amd64:${DNS_VERSION}k8s-dns-dnsmasq-nanny-amd64:${DNS_VERSION}kube-flannel:${FINANNEL_VERSION})for imageName in ${images[@]} ; do
  docker pull $ALIYUN_URL/$imageName
  docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
  do

三、kubernetes集群部署

  • 初始化kubeadm

    $ kubeadm init \
    --kubernetes-version=v1.7.3 \
    --pod-network-cidr=10.244.0.0/16 \
    --apiserver-advertise-address=192.168.61.91
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    $ kubectl get cs
    NAME                 STATUS    MESSAGE              ERROR
    scheduler            Healthy   ok                   
    controller-manager   Healthy   ok                   
    etcd-0               Healthy   {"health": "true"}
    • 查看集群状态

    • 配置kubectl访问集群

    • 在初始化时要加上 kubernetes-version

  • 安装Pod Network

    mkdir -p ~/k8s/$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
    $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    $ kubectl create -f kube-flannel-rbac.yml
    clusterrole "flannel" created
    clusterrolebinding "flannel" created
    $ kubectl apply -f  kube-flannel.yml
    serviceaccount "flannel" created
    configmap "kube-flannel-cfg" created
    daemonset "kube-flannel-ds" created
    kubectl get pod --all-namespaces -o wide
    • 使用kubectl get pod --all-namespaces -o wide确保所有的Pod都处于Running状态。

    • flannel network add-on

到这一步,运用kubeadm 安装k8s 1.7 就算成功了,下来就是运用kubectl 来操作部署运行实际的容器!!!



作者:一个全栈的小白
链接:https://www.jianshu.com/p/0d85626e7498


0人推荐
随时随地看视频
慕课网APP