k8s Installation and deployment

准备

由于我有你们懂得的东西,可以去国外下载对应的镜像组件等,还是比较方便,如果是没有的话,可能还得配置网络源等东西会比较麻烦

安装ubuntu

我是用的mac装的vnware,在虚拟机里面装的ubuntu,还是蛮简单的,注意的是需要至少给虚拟机cpu分配两核,k8s至少要两核才能安装

安装需要的软件

安装一些基础工具

sudo apt-get update && apt-get install -y curl telnet wget man \

apt-transport-https ca-certificates software-properties-common vim

安装docker

  • 下载docker18.06的离线安装包 [18.06]

  • scp到自己的虚拟机上面去

    先查看自己虚拟机的ip地址:ifconfig
    然后 scp docker-ce_18.06.1_ce_3-0_ubuntu_amd64.deb tan@172.16.234.132:/home/tan/package

搞定

  • 离线安装虚拟机

    sudo dpkg -i docker-ce_18.06.1_ce_3-0_ubuntu_amd64.deb

    我安装遇到了错误 提示我依赖缺失 然后我就安装依赖

    sudo apt-get install -y libltd17

    然后又提示我找不到包,应该就是源文件的问题,更新下源文件

    #仅检查,不更新

    sudo apt update

    #更新已安装的软件包

    sudo apt upsade

    解决之后重新安装docker,搞定

  • 允许开机启动docker

    sudo systemctl enable docker

    sudo systemctl start docker

  • 启动一个精简的操作系统容器测试

    sudo docker run -ti alpine:latest sh

  • 将当前的普通用户添加到当前的docker用户组里面去

    sudo groupadd docker

    sudo usermod -aG docker $USER

kubernetes安装

  • 免费的阿里云镜像加速器

    https://ozcouvlb.mirror.aliyuncs.com

  • 配置国内镜像加速器

    vim /etc/docker/daemon.json

    #文件里的内容如下:

    # {

    # "registry-mirrors": [https://ozcouvlb.mirror.aliyuncs.com]

    #}

  • 重启docker服务

    sudo systemctl daemon-reload

    sudo systemctl restart docker

  • 配置并安装k8s源

  • 创建配置文件

    sudo vim /etc/apt/sources.list.d/kubernetes.list

    #添加以下内容

    #deb https://mirrors.ustc.edu.cn/kubernetes/apt kubernets-xenial main

    sudo chmod 640 /etc/apt/sources.list.d/kubernetes.list

  • 执行如下命令更新操作系统源

> sudo apt update
  • 有可能遇到的问题 NO_PUBKEY,解决方法如下:

    #添加认证 一定要用自己的账户执行,不能用root

    sudo gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB(回显NO_PUBKEY的后8位)

    sudo gpg --export --armor BA07F4FB

    #将回显的key保存到一个文件里面

    vim pubkey

    #将ley添加到本地的truested数据库中

    sudo apt-key add pubkey

  • 解决后再次更新,完美搞定

  • 禁止基础设施

    • 关闭防火墙(容器之间通讯不需要这些限制,话说我之前用win一直也都是关闭的)

    sudo ufw disable

    • 关闭swap(k8s不希望使用swap)

      sudo swapoff -a

      永久关闭

      sudo sed -i 's/.*swap.*/#$/' /etc/fstab

    • 禁止selinux(ubuntu默认安装的安全组件)

      #安装操控selinux的组件

      sudo apt install -y selinux-utils

      #禁止selinux

      setenforce 0

      #重启

      shutdown -r now

      #查看是否关闭

      sudo getenforce

  • k8s系统网络配置

    1. 配置内核参数,将桥接的IPv4流量传递到iptables的链

    创建配置文件

    sudo vim /etc/sysctl.d/k8s.conf

    添加如下内容:

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

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

    vm.swappiness = 0

    1. 使配置文件生效

      sudo modprobe br_netfilter

      sudo sysctl -p /etc/sysctl.d/k8s.conf

  • 安装k8s

    sudo apt update && apt-get install -y kubelet=1.13.1-00 kubernetes-cni=0.6.0-00 kubeadm=1.13.1-00 kubectl=1.13.1-00

    • kubelet 永久的后端服务
    • kubectl 客户端进程,用户和开发者使用kubectl可以运维维护k8s
    • kubeadm 也是客户端进程,权限很高,相当于管理员,用的很少
  • 设置开机自启动

    sudo systemctl enable kubelet && systemctl start kubelet

    sudo shutdown -r now

  • 验证k8s

    kubectl get nodes

    kubectl version

创建多节点

  • 将已经搭建好的环境的虚拟机复制两份出来,搭建一个三节点的集群

    将已经搭建好开发环境的虚拟机关机,然后创建完整克隆

  • 之后再用ifconfig命令查看新节点的ip,用secureCRT登录节点

  • 给node配置hostname

    su

    vim /etc/hostname

    #分别改为master/node1/node2

  • 配置ip地址

    vim /etc/netplan/50-cloud-init.yaml

network:

​ ethernets:

​ ens33:

​ addresses: [172.16.234.134/24]

​ dhcp4: false

​ gateway4: 172.16.234.2

​ nameservers:

​ addresses: [172.16.234.2]

​ optional: true

​ version: 2

按照自己节点的ip配置,也可以自己定为连续的ip,方便操作,dhcp改成false防止每次重启ip变掉

​ > netplan apply

使配置生效

  • 修改hosts文件

    vim /etc/hosts

    #输入以下内容

    #172.16.234.132 master

    #172.16.234.133 node1

    #172.16.234.134 node2

三个节点均需要配置,通过ping来检验是否配置成功

部署k8s集群

  • ---------master节点上配置 --------

  • 创建k8s的管理工具kubeadm对应的配置文件,候选操作在/home/itcast/working/ 目录下

  • 使用kubeadm配置文件,通过在配置文件中指定docker镜像地址部署

    生成配置文件

    kubeadm config print init-defaults ClusterConfiguration > kubeadm.conf

  • 修改配置文件里面的下面项

    vim kubeadm.conf

    #修改k8s版本号为v1.13.1

    kubernetesVersion: v1.13.1

    #修改hostname为master

    name: master

    #修改kubeadm.conf中的API服务器地址

    localAPIEndpoint:

    ​ advertiseAddress: 172.16.234.132 # master的IP

    ​ bindPort:6443

    #配置子网网络

    networking:

    ​ dnsDomian: cluster.local

    ​ podSubnet: "10.244.0.0/16" # k8s内部pod网络,官方推荐

    ​ servicesSubnet: 10.96.0.0/12 # k8s服务网络,官方推荐

    scheduler: {}

  • 拉取k8s必备的模块镜像

    #查看需要哪些镜像文件需要拉取

    kubeadm config images list --config kubeadm.conf

    #k8s.gcr.io/kube-apiserver:v1.13.1. 对外端口,提供入口让外部访问集群
    #k8s.gcr.io/kube-controller-manager:v1.13.1 内部管理器
    #k8s.gcr.io/kube-scheduler:v1.13.1 内部任务调度器
    #k8s.gcr.io/kube-proxy:v1.13.1 负载均衡
    #k8s.gcr.io/pause:3.1 业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效
    #k8s.gcr.io/etcd:3.2.24 数据一致性
    #k8s.gcr.io/coredns:1.2.6

    #拉取全部当前版本k8s关联的镜像

    kubeadm config images pull --config ./kubeadm.conf

    #如果无法下载,只能去docker.io仓库手动拉镜像然后改tag(或者registry.cn-hangzhou.aliyuncs.com/google_containers)

    docker pull mirrorgooglecontainers/kube-apiserver:v1.13.1

    docker tag mirrorgooglecontainers/kube-apiserver:v1.13.1 k8s.gcr.io/kube-apiserver:v1.13.1 #打tag,和需要的镜像名保持一致

    docker rmi mirrorgooglecontainers/kube-apiserver:v1.13.1 #删除掉多余的镜像

    #其他所有镜像类似,k8s.gcr.io/coredns:1.2.6特例

    docker pull coredns/coredns:1.1.3

    root@tan:/home/tan/package# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    k8s.gcr.io/kube-proxy v1.13.1 fdb321fd30a0 11 months ago 80.2MB
    k8s.gcr.io/kube-apiserver v1.13.1 40a63db91ef8 11 months ago 181MB
    k8s.gcr.io/kube-controller-manager v1.13.1 26e6f1db2a52 11 months ago 146MB
    k8s.gcr.io/kube-scheduler v1.13.1 ab81d7360408 11 months ago 79.6MB
    k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 14 months ago 220MB
    k8s.gcr.io/coredns 1.2.6 b3b94275d97c 18 months ago 45.6MB
    k8s.gcr.io/pause 3.1 da86e6ba6ca1 23 months ago 742kB

  • 初始化k8s环境

    sudo kubeadm init --config ./kubeadm.conf

回显如下:

	 > 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 172.16.234.132:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:ebc50ff8588c35917f9c6f84f2bd8048352b82bfb9ef06cf5b63934cb9862f49

根据提示,做如下操作

#master节点基本文件夹配置

mkdir -p $HOME/.kube

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

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

同时,如果node节点想要加入master集群,需要执行以下命令

kubeadm join 172.16.234.132:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:ebc50ff8588c35917f9c6f84f2bd8048352b82bfb9ef06cf5b63934cb9862f49

  • 启动k8s

    sudo systemctl enable kubelet

    sudo systemctl start kubelet

  • 验证k8s启动结果

    kubectl get node

如果有问题,可以参考这个 拉取最新版本然后重新来一遍,我就是这个花了一下午(微笑脸)

未完待续。。。