zoukankan      html  css  js  c++  java
  • hyper-v虚拟机上的centos多节点k8s集群实践

    之前体验了minikube,掉深坑里至今还没有爬出来,玩单节点用minikube够了,

    但傻瓜试的安装让人对k8s理解不是很深刻(坑),而且多节点好像有什么奇怪的问题

    所以我这次要用两个虚拟机来模拟k8s集群   一主节点一工作节点

    hostname      ipaddr   cpu   硬盘  内存  OS    docker  k8s

    m1    1921.168.1.200  2    20G   2G    centos7  18    1.16.2

    w1    1921.168.1.201  2    20G   2G    centos7  18    1.16.2

    由于我使用的虚拟机驱动是hyper-v  所以要记得每个虚拟机关闭动态内存  关于虚拟机的安装配置这里就不再深入讨论

    虚拟机交换机

    动态内存关闭

    我先创建一个虚拟机,安装完docker,k8s和一些其他配置后,再复制,这样比较快一点

    但是k8s集群里的节点  mac和uuid不能重复,这个到时再想办法修改

    安装centos时选择最小安装,图形界面不安装,这样比较省计算机资源

    最小安装完成重启后,  需要做的事情 1.修改网卡为开机自动启动,2.打开ssh 

    先来打开ssh吧,  hyper-v里面操作不方便 我要用powersheel连接上去

    vi /etc/ssh/sshd_config  

     取消两行注,由于我是用root登录,所以要将permitrootlogin设置成yes

    重启服务 

    service sshd restart

    接下来把网卡设置成开机自启,因为现在网卡是没有启动的

    先ip addr 查一下网卡名称  然后进入到 /etc/sysconfig/network-scripts/目录  ls|grep 网卡名称

     

    原来的配置为 动态获取ip,不开机自动启动

     修改成,开机自动启动, 静态ip

     修改hosts文件

    vi /etc/hosts

    在后面加上两个节点的host

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.1.200 m1
    192.168.1.201 w1

     保存后

    reboot 指令重启

    管理员权限打开powershell    输入ssh root@192.168.1.200连接

    如果出现

    到用户目录/.ssh/known_hosts 编辑删除现有ip的那一行重连即可

    连上来后,先更新yum

    install -y yum-utils   device-mapper-persistent-data   lvm2
    yum update

    再设置docker仓储

    yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo

    然后安装18版本的docker,安装太高k8s用不了

    yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io

    安装完成后 设置启动docker并设置开机启动

    systemctl start docker && systemctl enable docker

    接下来设置docker 的镜像源, 否则将被墙

    [root@localhost ~]# mkdir -p /etc/docker
    [root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
    > {
    >   "registry-mirrors": ["https://自己去注册自己的不懂百度.mirror.aliyuncs.com"]
    > }
    > EOF
    

    把daemon.json 改名为daemon.conf

    mv /etc/docker/daemon.json  /etc/docker/daemon.conf

    设置好重启一下docker

    [root@localhost ~]# systemctl daemon-reload
    [root@localhost ~]# systemctl restart docker

    最后设置k8s相关的配置 先设置hostname 为主节点 m1 (master node

    [root@localhost ~]# hostnamectl set-hostname m1

    重新登录一下验证是否修改成功

    [root@localhost ~]# exit
    logout
    Connection to 192.168.1.200 closed.
    PS C:WINDOWSsystem32> ssh root@192.168.1.200
    root@192.168.1.200's password:
    Last login: Mon Nov  4 20:42:51 2019 from 192.168.1.104
    [root@m1 ~]#

    关防火墙

    [root@m1 ~]# systemctl stop firewalld
    [root@m1 ~]# systemctl disable firewalld

    禁用swap

    [root@m1 ~]# swapoff -a
    [root@m1 ~]# sed -i.bak '/swap/s/^/#/' /etc/fstab

    修改网桥模式

    [root@m1 ~]# sysctl net.bridge.bridge-nf-call-iptables=1
    [root@m1 ~]# sysctl net.bridge.bridge-nf-call-ip6tables=1
    [root@m1 ~]# cat <<EOF >  /etc/sysctl.d/k8s.conf
    > net.bridge.bridge-nf-call-ip6tables = 1
    > net.bridge.bridge-nf-call-iptables = 1
    > EOF
    [root@m1
    ~]# sysctl -p /etc/sysctl.d/k8s.conf

    给yum 加kubernetes 阿里云 镜像源

    [root@m1 ~]# cat <<EOF > /etc/yum.repos.d/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
    > EOF

    更新yum缓存

    yum clean all
    yum -y makecache

    安装 kubeadm kubelet kubectl

    • kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
    • kubeadm 用于初始化集群,启动集群的命令工具
    • kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
    yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2

    启动kubelet 并设置开机自动启动

    [root@m1 ~]# systemctl enable kubelet && systemctl start kubelet

    创建下载kubernetes镜像缓存脚本 ,并启动它下载

     vi image.sh 
    #!/bin/bash
    url=registry.cn-hangzhou.aliyuncs.com/google_containers
    version=v1.16.2
    images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
    for imagename in ${images[@]} ; do
      docker pull $url/$imagename
      docker tag $url/$imagename k8s.gcr.io/$imagename
      docker rmi -f $url/$imagename
    done

    发现没有权限

    [root@m1 ~]# ./image.sh
    -bash: ./image.sh: Permission denied

    给权限后重新执行脚本 

    chmod 777 image.sh

    ./image.sh

    结束后查看一下docker 的镜像

    [root@m1 ~]# docker images
    REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
    k8s.gcr.io/kube-proxy                v1.16.2             8454cbe08dc9        2 weeks ago         86.1MB
    k8s.gcr.io/kube-apiserver            v1.16.2             c2c9a0406787        2 weeks ago         217MB
    k8s.gcr.io/kube-controller-manager   v1.16.2             6e4bffa46d70        2 weeks ago         163MB
    k8s.gcr.io/kube-scheduler            v1.16.2             ebac1ae204a2        2 weeks ago         87.3MB
    k8s.gcr.io/coredns                   1.3.1               eb516548c180        9 months ago        40.3MB
    k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        11 months ago       258MB
    k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        22 months ago       742kB

    说明下载正常

    ,接下来我要将这个虚拟机备份一下, 将来之前做的那些工作都可以用还原的方式略过了

    然后我删除了虚拟机k8s-m1,因为我要重新规划保存的位置

    把刚才导出的虚拟机导入

     再导入一次,为工作节点

     接下来把刚才导入的两个虚拟机再次删除,我们要的只是他硬盘里的数据,  否则 product_uuid会重复,所以我们要多做几步操作

     添加 新的虚拟机,选择硬盘为刚才导入时选择的硬盘, 前面内存那里记得不要选动态内存,如法炮制 k8s-w1

    这时两个虚拟机的静态ip是冲突的,我们启动第二台修改ip地址为192.168.1.201

    vi /etc/sysconfig/network-scripts/ifcfg-eth0

    hostname也修改成w1

    hostnamectl set-hostname w1

    修改好后reboot重启  顺便把k8s-m1也启动

    删除C:Usershbb.sshknown_hosts 后开两个管理员权限的ps 连接上m1 和w1

    接下来我们两边都修改hosts文件,加入 我们规划好的ip 的别名

    vi /etc/hosts

    查看mac 和uuid是否冲突

    cat /sys/class/net/eth0/address
    cat /sys/class/dmi/id/product_uuid

     都没有冲突了

     接下来做主节点m1的配置,下面的操作只需要在m1上执行

    kubeadm init --apiserver-advertise-address 192.168.1.200 --pod-network-cidr=192.168.0.0/16

    自动补全

    [root@m1 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    [root@m1 ~]# source .bash_profile

    安装网络策略,

    kubectl create -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml

    默认情况下  master上不能安装pod,因为主节点上打上了污点

    如果要在master上安装pod,则要把污点去掉

    查看污点

    [root@m1 ~]# kubectl describe node m1|grep -i taints
    Taints: node-role.kubernetes.io/master:NoSchedule

    删除默认的污点

    [root@m1 ~]#  kubectl taint nodes m1 node-role.kubernetes.io/master-
    node/m1 untainted

    打污点的语法有兴趣可以自己去研究,这里不再介绍太多

    接下来就是工作节点 w1了

    在我刚把m1 kubeinit时产生了一个 命令,可以复制去子节点上执行以加入 主节点

    也可以手动创建 

    kubeadm token create --print-join-command

    复制去工作节点上执行就可以直接加入主节点

    工作节点执行效果如下

     主节点查看node service pod compoent

    [root@m1 ~]# kubectl get node
    NAME   STATUS   ROLES    AGE   VERSION
    m1     Ready    master   18m   v1.16.2
    w1     Ready    <none>   11m   v1.16.2
    [root@m1 ~]# kubectl get svc --all-namespaces
    NAMESPACE     NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
    default       kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  18m
    kube-system   kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   18m
    [root@m1 ~]# kubectl get pods --all-namespaces
    NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE
    kube-system   calico-kube-controllers-dc6cb64cb-856pv   1/1     Running   0          15m
    kube-system   calico-node-k259l                         1/1     Running   0          12m
    kube-system   calico-node-z5wbs                         1/1     Running   0          15m
    kube-system   coredns-5644d7b6d9-v8wjh                  1/1     Running   0          19m
    kube-system   coredns-5644d7b6d9-z2zsw                  1/1     Running   0          19m
    kube-system   etcd-m1                                   1/1     Running   0          18m
    kube-system   kube-apiserver-m1                         1/1     Running   0          18m
    kube-system   kube-controller-manager-m1                1/1     Running   0          18m
    kube-system   kube-proxy-b882q                          1/1     Running   0          12m
    kube-system   kube-proxy-vxfxj                          1/1     Running   0          19m
    kube-system   kube-scheduler-m1                         1/1     Running   0          17m

     [root@m1 ~]# kubectl get cs -o json

    接下来可以加入一些pod 测试 ,加入pod的方式有两种

    使用yaml文件安装/卸载  -f后面接一个yaml文件,可以是网络路径

    kubectl create -f kubernetes-dashboard.yaml 
    kubectl delete-f kubernetes-dashboard.yaml 

    一种是直接使用镜像,直接使用镜像比较少见

    本人也还没有研究,可以参考这个地方

    http://docs.kubernetes.org.cn/618.html

  • 相关阅读:
    十三、mysql 分区之 RANGE && LIST
    十二、mysql sql_mode 简学
    十一、mysql输入安全
    十、mysql事务的简介
    九、mysql触发器的概念
    左链接、右链接
    PHP 对数组数值进行排序,使用另一个容器
    JQUERY基础2 效果 遍历 内置遍历函数
    JQUERY基础
    orcal 单行函数组函数
  • 原文地址:https://www.cnblogs.com/nocanstillbb/p/11798854.html
Copyright © 2011-2022 走看看