背景:

  • 不会docker、k8s的开发不是好运维,啥都不说了,开撸!

实验环境:

  • 两台阿里云主机,一个maser,一个node。
  • Centos7.6
  • 科学上网

阿里云_副本.png

  • 本实验用的是官方推荐的快速安装 Kubernetes 集群的工具kubeadm。

    基础环境配置

    1.修改主机名

  • hostnamectl set-hostname kube-master

  • hostnamectl set-hostname kube-node

    2.停用防火墙

  • systemctl stop firewalld

  • systemctl disable firewalld

    3.关闭SELinux

  • setenforce 0

  • sed -i “s/^SELINUX=permissive/SELINUX=disabled/g” /etc/selinux/config

    4.加载br_netfilter

  • modprobe br_netfilter

    5.添加配置内核参数

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

6.加载配置

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

    7.安装docker

  • 安装的最新版本18.09.4

    yum install -y yum-utils
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum install -y docker-ce
    systemctl start docker && systemctl enable docker
    

8.安装kubeadm,kubelet,kubectl

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

9.下载master所需镜像

  • kubeadm config images pull —kubernetes-version v1.14.0
  • docker images镜像.png

10.初始化master

  • 创建kubeadm的yaml文件
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
controllerManager:
    extraArgs:
        horizontal-pod-autoscaler-use-rest-clients: "true"
        horizontal-pod-autoscaler-sync-period: "10s"
        node-monitor-grace-period: "10s"
apiServer:
    extraArgs:
        runtime-config: "api/all=true"
kubernetesVersion: "stable-1.14"
  • kubeadm init —config kubeadm.yaml(注意,初始化完成后,master的部署就完成了,部署完成后,kubeadm 会生成一行指令:)
kubeadm join 172.31.76.223:6443 --token y0ad6b.i9j4qut76pof5o4m     --discovery-token-ca-cert-hash sha256:2801e639c2fbacc5a09fe29117c775dab4ecabec485177b5305e98930a5ae0cc
  • 这个 kubeadm join 命令,是用来给这个Master 节点添加更多工作节点(Worker)的命令。
  • 注意:token的有效期为24h,超时后会失效,node就无法加入集群,可通过kubeadm token create —print-join-command命令重新获取token加入
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    需要这些配置命令的原因是:Kubernetes 集群默认需要加密方式访问。所以,这几条命令,就是将刚刚部署生成的Kubernetes 集群的安全配置文件,保存到当前用户的.kube 目录下,kubectl 默认会使用这个目录下的授权信息访问 Kubernetes 集群。如果不这么做的话,我们每次都需要通过export KUBECONFIG 环境变量告诉kubectl 这个安全配置文件的位置。

加入worker节点

  • 1.配置基础环境(master上的1-10步安装一遍)
  • 执行kubeadm join命令(注意token的有效期)

    集群插件安装

  • 网络插件weave或flannel

kubectl apply -f https://git.io/weave-kube-1.6 weave安装
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • dashboard可视化插件
wget  https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
vi kubernetes-dashboard.yaml 
kubectl apply -f kubernetes-dashboard.yaml

dashboard修改如下:
dashboard.png

本地访问dashboard:

  • 由于安全问题,1.7版本以后的dashboard本地访问默认只能通过proxy的方式。
  • 本地访问命令:kubectl proxy —address=’0.0.0.0’ —accept-hosts=’^*$’ —disable-filter=true

打开浏览器,访问页面如下:
web.png

通过token方式进行登录:

  • 获取token命令:
    • kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

登录后页面如下:
登录.png

  • rook存储插件

    git clone https://github.com/rook/rook.git
    cd rook/cluster/examples/ kubernetes/ceph/
    kubectl create -f common.yaml(先运行此命令,否则执行后面两条会报错)
    kubectl create -f operator.yaml 
    kubectl create -f cluster.yaml 
    kubectl -n rook-ceph get pod
    
  • Kubernetes命令:

    • kubectl get pods 查看运行的pod
    • kubectl get nodes 查看node信息
    • kubectl delete pod nginx-65f88748fd-4ghwb 删除pod
    • kubectl delete deployment nginx 删除deployment(删除pod时,必须删除deployment)
    • kubectl create -f nginx.yaml 创建resource
    • kubectl scale deploy nginx-deployment —replicas=2 扩缩容副本