美文网首页
使用虚拟机在3台centos7系统安装docker和k8s集群

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

作者: 程序员阿远 | 来源:发表于2022-05-24 16:51 被阅读0次

    一、安装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.confHOME/.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

    相关文章

      网友评论

          本文标题:使用虚拟机在3台centos7系统安装docker和k8s集群

          本文链接:https://www.haomeiwen.com/subject/rqajprtx.html