好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)

一、简介

1.简介

kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

2.架构

1)Kubernetes集群的组成

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第1张图片

1.1 Master节点的核心组件

Master节点是Kubernetes集群的管理和控制节点。Master节点由如下4个进程组成:

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第2张图片

apiserver:提供Restful API,是整个集群管理和控制的入口。apiserver封装了资源对象的CRUD操作并持久化到etcd中,REST API提供给外部客户端和内部组件调用。

scheduler:是调度器,主要负责Pod调度,每个Pod最终被调度到哪台服务器上是由Scheduler决定的

controller-manager:是比较关键的组件,是Kubernetes集群中所有资源的自动化控制中心

etcd: etcd是一个分布式的键值存储,它实际上保存整个Kubernetes集群各种资源和状态,可以它理解成Kubernetes集群的数据库。

scheduler和controller-manager都是通过apiserver从etcd中获取各种资源的状态,进行相应的调度和控制操作。

  1.2   Node节点的组件

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第3张图片

Node节点是Kubernetes集群的工作负载节点,我们的服务实例是跑在多个Node节点上。Node节点上主要有如下组件:

kubelet:主要负责本节点Pod的生命周期管理,定期向Master上报本节点及Pod的基本信息。kubelet会从apiserver接收Pod的创建请求,启动和停止Pod。

kube-proxy: 实现Kubernetes上Service的通信及负载均衡。kuer-proxy目前有userspace和iptables两种实现方式。userspace是在用户空间,通过kuber-proxy实现负载均衡的代理服务。这个是kube-proxy的最初的版本,较为稳定,但是效率不太高。另外一种方式是iptables的方式,在内核空间,是纯采用iptables来实现LB,是Kubernetes目前默认的方式。

2) Kubernetes HA部署方案

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第4张图片

部署了3个Master节点,每个Master节点的etcd组成集群

3个Master节点上的APIServer的前面放一个负载均衡器,工作节点和客户端通过这个负载均衡器和APIServer进行通信

scheduler和controller-manager支持leader选举,能保证在集群中多个实例只有一个工作,其他为备用

二、准备虚拟机软件和Linux OS

1.虚拟机软件安装(VirtualBox6.10)

https://www.jianshu.com/p/7c1b9c24499d 2

2。Linux OS安装(Ubuntu20.04) 

https://www.jianshu.com/p/9f08d6e7c4ab

3。设置虚拟机的处理器数量至少为2

        master节点处理器数量至少为2

        node节点处理器数量可以为1

        本实验只需要一个master节点和一个node节点

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第5张图片

4.配置windows与ubuntu间的共享目录

    在Ubuntu20.04中创建share目录    

    人工挂接

        sudo mount -t vboxsf -o rw,uid=1000,gid=1000 share ~/share

    启动时自动挂接

            sudo vi /etc/fstab

            在底下加一句

            share /home/zhangwb/share vboxsf rw,gid=1000,uid=1000,auto 0 0

            注意目录/home/zhangwb/share要换成实际的路径

4.配置国内源

    备份sources.list文件

    $ cd /etc/apt

    $ sudo mv sources.list sources.list.bak

    $ sudo vi /etc/apt/sources.list  

    //插入国内源(将附录的国内yum源放入到文件中)

    $ sudo apt-getupdate

4.安装sshd

安装openssh-server

        $ sudo apt-get install openssh-server

生成key

            运行ssh-keygen生成公钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub

                    ssh-keygen -t rsa

配置authorized_keys

                     cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

                    cat ~/.ssh/authorized_keys

执行ssh

                ssh localhost

三、安装前配置 

本实验先安装好一台master机器,等所有软件都安装好之后,从master复制出来一个虚拟机作为node节点

1.规划主机名

    规划主机名称

    k8s-master

    k8s-node1

    k8s-node2

2.设置主机名

    $ sudo hostnamectl set-hostname "k8s-master"     // Run this command on masternode

    $ cat /etc/hostname

    k8s-master

    $ sudo hostnamectl set-hostname "k8s-node1"     // Run this command on node-0

    $ sudo hostnamectl set-hostname "k8s-node2"     // Run this command on node-1

3.配置 /etc/hosts 

查看ip地址

$ ifconfig

//要是提示没有安装包时

$ sudo apt install net-tools

配置/etc/hosts

$ sudo vi /etc/hosts

10.1.13.106    k8s-master

#10.1.13.107    k8s-node1

#10.1.13.108    k8s-node1

将IP替换为实际的ip地址

4.禁用swap

$ sudo swapoff –a

$ sudo vi /etc/fstab

把/etc/fstab包含swap那行记录#掉。

5.关闭防火墙

$ sudo systemctl stop firewalld

$ sudo systemctl disable firewalld

6.禁用Selinux

$ sudo apt install selinux-utils

$ setenforce 0

7.确保时区和时间正确

$ sudo timedatectl set-timezone Asia/Shanghai

$ sudo systemctl restart rsyslog

$ sudo apt-get install ntpdate –y

$ sudo ntpdate time.windows.com

8.配置net.bridge.bridge-nf-call-iptables

$ cat <

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

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

EOF

$ sudo sysctl --system

9.设置rp_filter的值

$ sudo vi /etc/sysctl.d/10-network-security.conf

#将下面两个参数的值从2修改为1

net.ipv4.conf.default.rp_filter=1

net.ipv4.conf.all.rp_filter=1

$ sudo sysctl --system

10.enable IP forwarding on all nodes

$ sudo vi /etc/sysctl.conf

// 找到net.ipv4.ip_forward=1” and un-comment it

$ sudo sysctl -p

net.ipv4.ip_forward = 1

四、安装docker

1.查看当前安装的docker版本

$ docker version

2.卸载当前安装的docker版本(可选) 

$ sudo apt-get remove docker.io

3.查看可安装的docker版本(可选) 

安装以下包以使apt可以通过HTTPS使用存储库(repository):

$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加Docker官方的GPG密钥:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg| sudo apt-key add –

再更新一下apt包索引:

$ sudo apt-get update

列出可用的版本:

$ apt-cache madison docker.io

4.安装docker

安装最新版

$ sudo apt install -y docker.io

安装特定版

sudo apt-get install docker.io=xxx

xxx为apt-cache madison docker.io输出中第二列完整的信息,如

sudo apt-get install docker.io=19.03.8-0ubuntu1.20.04.1

5.启动docker

启动docker

$ sudo systemctl start docker

设置开机自启动

$ sudo systemctl enable docker

$ sudo systemctl enable docker.service --now

6.验证docker

$ systemctl status docker

$ docker --version

7.重启docker(当有配置改动后执行)

$ sudo pkill -SIGHUP dockerd

//或者

$ sudo systemctl restart docker

8.配置docker镜像加速器

获取加速器地址

访问www.aliyun.com,支付宝登录,然后到https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors获取地址和安装方法

配置镜像加速器

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

$ sudo mkdir -p /etc/docker

$ sudo tee /etc/docker/daemon.json <<-'EOF'

{

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

}

EOF

yyy为上一步中阿里云展示的加速域名前缀

$ sudo systemctl daemon-reload

$ sudo systemctl restart docker

五、安装K8s软件

1.安装最新版本

$ sudo apt-get update && sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl

$ curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

$ sudo tee /etc/apt/sources.list.d/kubernetes.list <

deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

EOF

$ sudo apt-get update

//安装最新版本

$ sudo apt-get install -y kubelet kubeadm kubectl

2.删除已安装版本

kubeadm version

sudo apt-get remove -y --allow-change-held-packages kubeadm kubectl kubelet kubernetes-cn

3.查询k8s可安装的版本:

apt-cache madison kubeadm

apt-cache madison kubelet

apt-cache madison kubectl

apt-cache madison kubernetes-cni

4.安装指定的k8s版本

sudo apt-get install -y kubelet=1.17.3-00 kubectl=1.17.3-00 kubernetes-cni=0.8.7-00 kubeadm=1.17.3-00

5.设置不随系统更新而更新

$ sudo apt-mark hold kubelet kubeadm kubectl

六、克隆nodes节点

1. 关闭虚拟机

$ sudo shutdown now

2. 复制虚拟机

回到Oracle VM VirtualBox主界面,选择k8s-master,右击鼠标,点击复制...

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第6张图片

名称:k8s-node1

路径:选择合适的路径

MAC地址:为所有网卡重新生成MAC地址

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第7张图片

下一步,选择完全复制

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第8张图片


3. 重启虚拟机

    k8s-master

    k8s-node

4. 重新设置node主机名

    $ sudo hostnamectl set-hostname "k8s-node1"     // Run this command on node-1

   $ cat /etc/hostname

3.配置 /etc/hosts 

查看ip地址

$ ifconfig

4.配置/etc/hosts

$ sudo vi /etc/hosts

10.1.13.106    k8s-master

10.1.13.107    k8s-node1

七、初始化master(k8s-master节点上执行)

$ sudo kubeadm init --kubernetes-version=v1.17.3 --pod-network-cidr 10.244.0.0/16 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

注:

        --kubernetes-version=v1.17.3 当安装的是最新版本时,这个参数可以省略

        --pod-network-cidr 10.244.0.0/16    需要跟当前虚拟机的ip地址处于不同网段(ifconfig参考),并且与下面的网络插件参数设置要一致(calico.yaml中的CALICO_IPV4POOL_CIDR(原始值192.168.0.0/16))

        执行成功后,会出现如下提示

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第9张图片

 执行 

  mkdir -p $HOME/.kube

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

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

   kubectl get node

八、将node节点加入

在所有node节点上执行

sudo kubeadm join 192.168.3.164:6443 --token qqfpor.kxmumjmjnssqtg0o --discovery-token-ca-cert-hash sha256:20a02a32f27c13b4dddec7b4435370805c5bfd44186fbd25c9175a714e1e380e

其中:

192.168.3.164:6443 为master节点ip地址和端口

--token qqfpor.kxmumjmjnssqtg0o

    这个参数可以通过在master上执行:kubeadm token list获得

--discovery-token-ca-cert-hash sha256:20a02a32f27c13b4dddec7b4435370805c5bfd44186fbd25c9175a714e1e380e

    这个参数可以通过在master上执行:openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'           获得

   kubectl get node

等装好网络插件就会Ready了

九、安装网络插件(calico)

#下载

https://docs.projectcalico.org/v3.11/manifests/calico.yaml

vi calico.yaml

#修改CALICO_IPV4POOL_CIDR,为10.244.0.0/16(要与kubeadm inti中的--pod-network-cidr 10.244.0.0/16参数保持一致,默认为192.168.0.0/16)

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第10张图片

然后

$ kubectl apply -f calico.yaml

kubectl get node

需要等待一会,中间可以通过执行以下命令来查看pod是否全部ready

kubectl get pod -n kube-system

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第11张图片

十、验证

1.创建nginxdeployment

$ kubectl create deployment nginx-web --image=nginx

2.获取pod列表

$ kubectl get pod -o wide

3.测试nginx
curl http://10.244.36.65

好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法)_第12张图片

你可能感兴趣的:(好玩的K8s之基础软件安装01:基于Ubuntu 20.04安装kubernetes(kubeadm方法))