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

一、简介

1.简介

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

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

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

2.架构

1)Kubernetes集群的组成

1.1 Master节点的核心组件

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

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节点的组件

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部署方案

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

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

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

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

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

//www.greatytc.com/p/7c1b9c24499d 2

2。Linux OS安装(Ubuntu20.04) 

//www.greatytc.com/p/9f08d6e7c4ab

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

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

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

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

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-node1

路径:选择合适的路径

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

下一步,选择完全复制


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))

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

 执行 

  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)

然后

$ kubectl apply -f calico.yaml

kubectl get node

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

kubectl get pod -n kube-system

十、验证

1.创建nginxdeployment

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

2.获取pod列表

$ kubectl get pod -o wide

3.测试nginx
curl http://10.244.36.65

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345