8.13kubernetes(k8s)初步认识并搭建集群

titledatecommentscategoriestagspermalink
kubernetes(k8s)初步认识并搭建集群
2020/5/14
true
微服务
微服务
8.13

kubernetes概述

Kubernetes(简称K8s,8的意思是k与s中间有8个字母)是Google在2014年发布的⼀个开源项⽬。 据说Google的数据中⼼⾥运⾏着20多亿个容器,⽽且Google⼗年 多前就开始使⽤容器技术。 在服务端部署服务的时候,如过使用的容器比较少,比如只有3个docker容器,可以人工手动地进行管理。但是如过容器特别多, 很明显不可能人工管理了。

而k8s就是用来管理这些容器(通常是docker)集群的,k8s定义了新的最小管理粒度——pod(相当于一组docker,可以是一个或者多个)。提供通信,通信、负载均衡、资源共享管理、数据一致性、容灾、监控、健康检查···等功能。

k8s的安装

以vmware虚拟机安装的3台ubuntu为例(内存小于16G小心电脑可能会卡死) 虚拟机和docker ce的安装不再赘述 虚拟机安装好后要进行如下操作

1、修改root密码 sudo passwd 2、使⽤root⽤户登录,打开配置⽂件vim /etc/cloud/cloud.cfg,修改配置preserve_hostname: true 3、重启系统 4、配置静态ip(为什么有三个,后面模拟集群会说) vim /etc/netplan/50-cloud-init.yaml UbuntuMaster 172.16.235.146 UbuntuNode1 172.16.235.147 UbuntuNode2 172.16.235.148 5、修改hosts, ip(就是vmware分配的ip) : master

以下软件版本可以保证成功(其他版本不保证):

  • Unbuntu18.10-server版本
  • docker-ce_18.06.1~ce~3-0~ubuntu_amd64.deb
  • Kubernetes ⽬前安装版本 v1.13.1

一、配置k8s国内源,并关闭防火墙等

1、创建配置文件

sudo touch/etc/apt/sources.list.d/kubernetes.list

2、添加写权限

 sudo chmod 666 /etc/apt/sources.list.d/kubernetes.list

再向文件中添加如下内容

deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main

3、执⾏sudo apt update 更新操作系统源,开始会遇⻅如下错误

····· The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6A030B21BA07F4FB ···

签名认证失败,需要重新⽣成。记住上⾯的NO_PUBKEY 6A030B21BA07F4FB

4、添加认证key

运⾏如下命令,添加错误中对应的key(错误中NO_PUBKEY后⾯ 的key的后8位)

gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB

接着运⾏如下命令,确认看到OK,说明成功,之后进⾏安装:

gpg --export --armor BA07F4FB | sudo apt-key add -

5、再次重新sudo apt update更新系统下载源数据列表

这次应该能够更新成功

6、关闭防火墙

sudo ufw disable Firewall stopped and disabled on system startup

7、关闭swap

sudo swapoff -a

sudo sed -i 's/.swap./#&/' /etc/fstab

8、进制selinux

# 安装操控selinux的命令
$ sudo apt install -y selinux-utils
# 禁⽌selinux
$ setenforce 0
# 重启操作系统
$ shutdown -r now
# 查看selinux是否已经关闭
$ sudo getenforce
Disabled(表示已经关闭)

二、配置k8s系统网络

1、 配置内核参数,将桥接的IPv4流量传递到iptables的链 创建/etc/sysctl.d/k8s.conf⽂件 添加内容如下:

net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness = 0

2、使修改生效

sudo modprobe br_netfilter
sudo sysctl -p /etc/sysctl.d/k8s.conf

三、安装k8s

注意,先切到root用户下

1、安装Kubernetes ⽬前安装版本 v1.13.1

执行以下命令

apt update && apt-get install -y kubelet=1.13.1-
00 kubernetes-cni=0.6.0-00 kubeadm=1.13.1-00
kubectl=1.13.1-00

2、设置k8s开机启动

 sudo systemctl enable kubelet && systemctl start
kubelet
$ sudo shutdown -r now

四、验证是否正确安装

1、以root用户登录master,执行以下命令

kubectl get nodes

输出以下内容

The connection to the server localhost:8080 was refused - did you specify the right host or port?

3、查看当前k8s版本

kubectl version

会有一大堆的显示

Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920" , GitTreeState:"clean", BuildDate:"2018-12- 13T10:39:04Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"} The connection to the server localhost:8080 was refused - did you specify the right host or port?

说明安装成功

模拟集群

此时在VMWare中创建完整克隆,免得要安装配置3次,分别命名为node1,node2

此时有一个master,两个node, 共3个虚拟机,ip分别为192.168.236.177(178/179) master(或者node1/node2),并且hosts都做了配置

1、创建工作目录

mkdir /home/(yourname)/working
cd /home/(yourname)/working/

2、创建kubeadm.conf配置⽂件并修改

kubeadm config print init-defaults
ClusterConfiguration > kubeadm.conf

修改kubeadm.conf

vi kubeadm.conf
# 修改 imageRepository: k8s.gcr.io
# 改为 registry.cn-beijing.aliyuncs.com/imcto
imageRepository: registry.cn�beijing.aliyuncs.com/imcto
# 修改kubernetes版本kubernetesVersion: v1.13.0
# 改为kubernetesVersion: v1.13.1
kubernetesVersion: v1.13.1

修改kubeadm.conf中的API服务器地址,后⾯会频繁使⽤这个 地址

localAPIEndpoint: advertiseAddress: 192.168.236.177 bindPort: 6443

注意:192.168.236.177是master主机的ip地址,根据自己的时机情况修改

3、配置子网网络

所谓子网网络就相当于各个容器之间组成一个局域网,广播的时候只在这个局域网内广播

networking: dnsDomain: cluster.local podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12 scheduler: {}

这⾥的10.244.0.0/16 和 10.96.0.0/12分别是k8s内部pods和 services的⼦⽹⽹络,最好使⽤这个地址,后续flannel⽹络需要⽤ 到。

4、拉取k8s必备的镜像

可以通过以下命令查看哪些镜像需要拉取

kubeadm config images list --config kubeadm.conf

执行拉取操作

kubeadm config images pull --config ./kubeadm.conf

5、初始化kubernetes环境

sudo kubeadm init --config ./kubeadm.conf

更多kubeadm配置⽂件参数详⻅

kubeadm config print-defaults

k8s启动会有很多的输出,但要记住最后的内容,如

Your Kubernetes master 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 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/ You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.236.177:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert�hash sha256:e778d3665e52f5a680a87b00c6d54df726c2eda601c0d b3bfa4bb198af2262a8

按照官方提示,执行如下操作

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf
$HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后创建系统服务并启动

# 启动kubelet 设置为开机⾃启动
sudo systemctl enable kubelet
# 启动k8s服务程序
sudo systemctl start kubelet

6、验证kubernetes启动结果

kubectl get nodes

注意显示master状态是NotReady,证明初始化服务器成功的

查看当前k8s集群状态

kubectl get cs

NAMESTATUSMESSAGEERROR
schedulerHealthyok
controller-managerHealthyok
etcd-0Healthy{"health": "true"}

配置flannel⽹

从上一步的结果可以看出,⽬前只有⼀个master,还没有node,⽽且是NotReady状态,那 么我们需要将node加⼊到master管理的集群中来。在加⼊之前, 我们需要先配置k8s集群的内部通信⽹络,这⾥采⽤的是flannel⽹ 络。

1、部署集群内部通信flannel⽹络

cd $HOME/working
wget https://raw.githubusercontent.com/coreos/flannel/a70
459be0084506e4ec919aa1c114638878db11b/Documentation/
kube-flannel.yml

2、编辑这个⽂件,确保flannel⽹络是对的,找到net-conf.json标记 的内容是否正确。

net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" }

注意:这个"10.244.0.0/16"和 ./kubeadm.conf中的podsubnet的地址要⼀致。

3、应⽤当前flannel配置⽂件

kubectl apply -f kube�flannel.yml

得到如下输出

···
clusterrole.rbac.authorization.k8s.io/flannel
created
clusterrolebinding.rbac.authorization.k8s.io/flannel
created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

查看节点情况

kubectl get nodes

会看到如下输出

NAME STATUS ROLES AGE VERSION
master Ready master 10m v1.13.1

此时master已经是Ready状态了,表示已经配置成功了,那么我 们就需要配置node来加⼊这个集群。

把node加入集群

1、启动k8s后台服务

# 启动kubelet 设置为开机⾃启动
sudo systemctl enable kubelet
# 启动k8s服务程序
sudo systemctl start kubelet

2、将master机器的/etc/kubernetes/admin.conf传到到node1和node2

可以登录master终端,使用scp命令来完成,如:

#将admin.conf传递给node1
sudo scp /etc/kubernetes/admin.conf
name@192.168.236.178:/home/(yourname)/
#将admin.conf传递给node2
sudo scp /etc/kubernetes/admin.conf
name@192.168.236.179:/home/(yourname)/

3、分别登录node1、node2终端,创建基础kube配置⽂件环境

mkdir -p $HOME/.kube
sudo cp -i $HOME/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4、node1和node2连接到master

sudo kubeadm join 192.168.236.177:6443 --token
abcdef.0123456789abcdef --discovery-token-ca-cert�hash
sha256:e778d3665e52f5a680a87b00c6d54df726c2eda601c0d
b3bfa4bb198af2262a8

这⾥要注意,使⽤的hash应该是master主机 kubeadm init成功 之后⽣成的hash码(前面说了一定要记下来)。

5、两个node主机应用flannel网络

用scp 将master中的kube-flannel.yml分别传递给两个node节点.

然后分别启动两个网络

kubectl apply -f kube-flannel.yml

6、查看集群情况

kubectl get nodes

看到如下输出

NAME STATUS ROLES AGE VERSION master Ready master 35m v1.13.1 node1 Ready 2m23s v1.13.1 node2 Ready 40s v1.13.1

great,终于TMD完成集群的搭建了,累死人了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值