• 使用虚拟机在3台centos7系统安装docker和k8s集群


    一、安装docker

    环境:准备3台centos7系统,都安装上docker环境,具体安装步骤和流程如下

    参考:

    https://docs.docker.com/install/linux/docker-ce/centos/
    https://yeasy.gitbooks.io/docker_practice/content/install/

    1.1 centos7配置yum源

    > cd /etc/yum.repos.d/
    > mkdir repo_bak
    > mv *.repo repo_bak/
    > wget http://mirrors.aliyun.com/repo/Centos-7.repo
    > wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    > yum clean all
    > yum makecache
    

    1.2 卸载旧版本docker

    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    

    1.3 使用存储库安装docker

    安装所需的包

     sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    

    使用以下命令设置稳定存储库。

    # 阿里源,国内速度快
    sudo yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    1.4 安装DOCKER CE

    安装最新docker

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

    或者yum列出docker再进行安装

    yum list docker-ce --showduplicates | sort -r
    
    sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    
    例如,docker-ce-18.09.1
    

    1.5 建立 加入docker 用户组

    默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

    sudo groupadd docker
    sudo usermod -aG docker $USER
    

    1.5 启动Docker

    sudo systemctl start docker #启动
    sudo systemctl enable docker #开机启动
    

    查看有关Docker安装的更多详细信息

    docker --version
    docker version
    docker info
    

    测试hello-world

    docker run hello-world
    

    List Docker images

    docker image ls
    

    List Docker containers (running, all, all in quiet mode)

    docker container ls
    docker container ls --all
    docker container ls -aq
    

    1.6 卸载Docker CE

    sudo yum remove docker-ce
    sudo rm -rf /var/lib/docker
    

    1.7 国内加速

    vim /etc/docker/daemon.json
    

    加入:

    {
      "registry-mirrors": [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
      ]
    }
    

    重启:

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker
    

    二、安装Kubernetes集群

    参考:
    https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
    https://blog.csdn.net/MssGuo/article/details/122773155

    2.1 系统设置

    systemctl stop firewalld			#关闭防火墙
    systemctl disable firewalld		#设置开机不启动
    
    [root@master ~]# vim /etc/selinux/config		#永久关闭selinux
    SELINUX=disabled
    
    #关闭swap(k8s禁止虚拟内存以提高性能)
    [root@master ~]# 
    #永久禁用swap,注释掉/etc/fstab里的swap配置
    #/dev/mapper/centos-swap swap           swap    defaults    0 0
    #free -h  #可查看
    
    

    kubernetes1.14之后的版本推荐使用systemd,但docker默认的Cgroup Driver 是Cgroup,会使得kubelet部署报错(集群都这样修改)

    
    [root@master ~]# docker info | grep -i "Cgroup Driver"		#查看一下docker使用的Cgroup Driver,还真是cgroupfs
     Cgroup Driver: cgroupfs
    
    #处理办法:修改/etc/docker/daemon.json 文件,添加如下参数:
    [root@master ~]# vim /etc/docker/daemon.json 				#为了保持所有节点docker配置一致,所以其它节点的docker也改了
    {
        "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],	#这句是之前就配置了的,但要注意加一个道号
        "exec-opts": ["native.cgroupdriver=systemd"]			#添加这一句
    }
    [root@master ~]# systemctl restart docker
    [root@master ~]# docker info | grep -i "Cgroup Driver"		#查看验证
     Cgroup Driver: systemd
    

    2.2 安装kubelet、kubeadm、kubectl

    kubelet (真正的k8s服务) 运行在Cluster所有节点上,负责启动Pod和容器。
    kubeadm (只是工具)用于初始化Cluster。
    kubectl (只是工具)是Kubernetes命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。

    配置kubernetes的阿里云yum源(所有节点服务器都需要执行)

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    

    安装kubelet等服务、工具(所有节点服务器都需要执行)

    yum install -y kubeadm-1.23.1-0 kubectl-1.23.1-0 kubelet-1.23.1-0
    

    设置k8s服务kubelet开机启动(所有节点服务器都需要执行)

    # 设置开机启动
    systemctl enable kubelet
    
    # 启动命令
    systemctl start kubelet
    

    2.3 设置网桥参数

    #往k8s.conf文件添加内容
    cat > /etc/sysctl.d/k8s.conf <<EOF   
    net.bridge.bridge-nf-call-ip6tables=1
    net.bridge.bridge-nf-call-iptables=1
    net.ipv4.ip_forward=1
    vm.swappiness=0
    EOF
    
    #生效
    sysctl --system  
    

    2.4 设置主机名

    cat >> /etc/hosts <<EOF
    192.168.1.20 master
    192.168.1.21 node1
    192.168.1.22 node2
    EOF
    

    2.5 使用kubeadm安装k8s

    1、创建一个master节点,kubeadm init。
    2、将node节点加入kubernetes集群,kubeadm join <master_IP:port >。

    初始化【master节点】的控制面板

    # kubeadm init --help可以查看命令的具体参数用法
    kubeadm init \
    --apiserver-advertise-address=192.168.1.20 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.23.1 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16
    
    #再开一个窗口,执行docker images可以看到,其实执行kubeadm init时k8s去拉取了好多镜像
    
    • --apiserver-advertise-address=192.168.1.20 即master节点的IP
    • --image-repository registry.aliyuncs.com/google_containers 设置镜像仓库为国内的阿里云镜像
    • --kubernetes-version v1.23.1 设置k8s的版本
    • --service-cidr=10.96.0.0/12 设置node节点的网络
    • --pod-network-cidr指定Pod网络的范围。Kubernetes支持多种网络方案,而且不同网络方案对--pod-network-cidr有自己的要求,这里设置为10.244.0.0/16是因为我们将使用flannel网络方案,必须设置成这个CIDR。

    2.6 成功后的返回以及操作

    Your Kubernetes control-plane 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
    
    Alternatively, if you are the root user, you can run:
    
      export KUBECONFIG=/etc/kubernetes/admin.conf
    
    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/
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 192.168.1.20:6443 --token deg1pk.88lgg93hqh74mbcg \
            --discovery-token-ca-cert-hash sha256:81eeac318c2eba7a06cdabb2b4cb30bfedd4359a7c1cd7b508b68f9f74fddbe5
    

    2.7 将node节点加入集群

    使用mater init 返回的命令。这段kubeamd join命令的token只有24h,24h就过期,需要执行kubeadm token create --print-join-command 重新生成。

    kubeadm join 192.168.1.20:6443 --token deg1pk.88lgg93hqh74mbcg \
            --discovery-token-ca-cert-hash sha256:81eeac318c2eba7a06cdabb2b4cb30bfedd4359a7c1cd7b508b68f9f74fddbe5 
    

    2.8 在master节点配置pod网络创建(部署容器网络,CNI网络插件)

    • node节点加入k8s集群后,在master上执行kubectl get nodes发现状态是NotReady,因为还没有部署CNI网络插件,其实在步骤四初始化完成master节点的时候k8s已经叫我们去配置pod网络了。
    • 在k8s系统上Pod网络的实现依赖于第三方插件进行,这类插件有近数十种之多,较为著名的有flannel、calico、canal和kube-router等,简单易用的实现是为CoreOS提供的flannel项目。
    #执行下面这条命令在线配置pod网络,因为是国外网站,所以可能报错,测试去http://ip.tool.chinaz.com/网站查到
    #域名raw.githubusercontent.com对应的IP,把域名解析配置到/etc/hosts文件,然后执行在线配置pod网络,多尝试几次即可成功。
    
    kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    

    查看pod状态:

    kubectl get pods -n kube-system		
    
  • 相关阅读:
    google hack常用语法介绍
    Java工具库Guava的不可变集合和新集合类型Multiset、Multimap、BiMap、RangeSet、RangeMap等的使用示例
    PCL 平面点云边界点按顺/逆时针排序
    微服务项目:尚融宝(41)(核心业务流程:借款额度审批)
    Devops学习Day1--概念
    模拟卷Leetcode【普通】341. 扁平化嵌套列表迭代器
    数字孪生园区场景中的坐标知识
    [网鼎杯 2020 青龙组]AreUSerialz
    飞行员需要新的策略来解决资金被困、外汇危机
    ISE的仿真库编译步骤——基于Omapl138/TMS320C6748+FPGA核心板
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/16295210.html