title | date | comments | categories | tags | permalink | ||
---|---|---|---|---|---|---|---|
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
NAME | STATUS | MESSAGE | ERROR |
---|---|---|---|
scheduler | Healthy | ok | |
controller-manager | Healthy | ok | |
etcd-0 | Healthy | {"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完成集群的搭建了,累死人了。