k8s-kubenetes安装
1.准备工作
因为没有机器,且计算机硬件限制,所以使用vm虚拟机模拟。
硬件方面:
k8s_master 2G 2core 20G
k8s_node1 1G 2core 20G
k8s_node2 1G 2core 20G
操作系统:
CentOS Linux release 7.6.1810 (Core)
网络:
虚拟机需要连接外网
静态ip,桥接模式,虚拟机直接访问外网。
k8s_master 192.168.20.71
k8s_node1 192.168.20.72
k8s_node2 192.168.20.73
用户:
三台虚拟机都使用root登录,操作
密码都是centos
设置好了后,关闭vm,让虚拟机后台运行,然后在本地用ssh连接,ssh工具xshell6。
到此,准备工作完成。
设置虚拟机静态IP:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
名称不一定是ens33
完成后保存,重启,然后就可以使用ssh连接了。
然后关闭vm软件,在弹出的提示中选择后台运行。
需要关闭的时候再次打开vm软件即可。
2.k8s介绍
k8s是干什么的,什么原理等等,网上多的是。
k8s安装方式有以下几种:
1.从网上下载二进制文件,然后启动(不推荐)
2.使用kubeadm(推荐)
3.从github下载源码,自行编译、启动(不推荐)
4.使用docker从docker仓库拉取(推荐)
基本上安装方式就上述4类,实际上2、4是一类方式。
不过最推荐的就是使用kubeadm进行安装,因为k8s涉及到多个服务共同协作,每个服务的配置比较多,如果手动一个一个的启动就非常的麻烦。
而且kubeadm一开始只是社区自发开发的安装脚本,后续经过考验,官方也开始支持并推荐使用kubeadm进行安装。
kubeadm的安装方式就是从google仓库下载二进制文件,然后生成配置文件,将一些初始化配置写入配置文件,然后启动服务即可。
3.k8s安装
3.1初始化hosts
因为我们是1主2副,所以需要在hosts配置主机名。配置了主机名,在需要IP的地方就可以用主机名代替,后续换IP只需要更新hosts即可,其他的无需修改。
#!/bin/bash
echo -e "192.168.20.71 k8s-master\
\n192.168.20.72 k8s-node1\
\n192.168.20.73 k8s-node2\
\n127.0.0.1 k8s-master" >> /etc/hosts
执行上述脚本后,重启网络服务service network restart
查看修改结果```cat /etc/hosts
注意 : 需要修改127对应的主机名
测试连通性
ping
这三个虚拟机能够相互ping通
3.2更新yum
yum clean all
yum makecache
yum update -y
3.3添加kubeadm的yum源
echo -e "[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0" >> /etc/yum.repos.d/kubernetes.repo
yum makecacahe fast
yum update -y
3.4下载kubeadm
#查看kubeadm的信息
yum list kubeadm --showduplicates|sort -r
yum install -y kubeadm 版本
我们下载最新的
yum install -y kubeadm 1.9.9-0
可以看出,安装kubeadm将会安装kubelet、kubernetes-cni、kubectl等服务
3.5关闭linux的swap
vi /etc/fstab
swapoff -a && swapon -a
3.6关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
3.8设置开机启动kubelet
systemctl stop kubelet
systemctl enable kubelet
systemctl start kubelet
这个时候启动失败是正确的,因为还没有使用kubeadm初始化环境。
3.9添加docker的yum源
yum install yum-utils -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecacahe fast
也可以使用wget手动添加yum源,见3.3
3.10安装docker
yum list docker-ce --showduplicates|sort -r
我们安装最新的
yum install -y docker-ce 3:19.03.3-3.el7
使用yum安装的时候遇到错误,导致安装失败,一般清除yum缓存,更新yum,重新安装即可解决大多数的问题。(前提不是网络、硬件等问题)
3.11设置开机启动docker
systemctl stop docker
systemctl enable docker
systemctl start docker
3.12配置docker参数
echo -e "{\n\
\"registry-mirrors\": [\"https://xxxx.mirror.aliyuncs.com\"],\n\
\"exec-opts\": [\"native.cgroupdriver=systemd\"]\n\
}" >> /etc/docker/daemon.json
这里配置docker使用阿里的仓库
然后将docker服务设置为系统服务
然后重启docker服务
systemctl daemon-reload
systemctl restart docker
3.13设置iptables的规则
modprobe br_netfilter
echo 1 >> /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 >> /proc/sys/net/bridge/bridge-nf-call-ip6tables
一定记得重启。
3.14使用kubeadm初始化环境
注意:上述13个步骤需要在所有的虚拟机上执行,也就是说不管是master还是node都需要做的操作。
kubeadm init \
--apiserver-advertise-address=192.168.20.71 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version v1.16.1 \
--pod-network-cidr=10.244.0.0/16
其中–apiserver-advertise-address表示k8s_master,
–image-repository表示使用阿里的云仓库(因为kubenetes的官方镜像在google服务中,因为GFW的缘故,需要vpn才能从google下载,而且速度很慢)
–kubernetes-version表示我们将要初始化的是v1.16.1的环境,最新的版本可以在github上查看
传送门
–pod-network-cidr表示网关
最新的就是
然后kubeadm就会从设置的镜像仓库下载镜像了,这里也就能说明为什么使用kubeadm安装k8s和使用docker镜像安装是一回事了,他们都是一样的。
到此,我们的master就安装好了。
3.15k8s访问设置
在这张图中,提示中说明了访问k8s集群需要做哪些事情:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
用大白话说就是哪个用户需要访问集群,就需要将master中的admin.conf文件作为用户的访问配置。
因为kubeadm在初始化环境的时候会初始化证书,然后k8s集群在交换数据时,都是使用restful请求完成的。
所以普通用户需要访问就需要证书。
这和你第一次在12306买火车票时,12306要求你安装证书是一样的。
所以,就需要将这个文件拷贝到用户下,然后赋予权限即可。
我们都是用root用户操作的。
k8s-master
#删除原来的目录
rm -rf /root/.kube
#创建需要的目录
mkdir /root/.kube
#拷贝文件
cp -i /etc/kubernetes/admin.conf /root/.kube/config
#更改文件所有者
chown root:root /root/.kube/config
接下来看下这个文件到底是啥
一些配置,和三个证书。
一定记下这个token.
拷贝出来放到其他地方。
接下来安装k8s-node1,k8s-node2加入k8s-master集群,使用上图红框中的命令即可
kubeadm join 192.168.20.71:6443 --token ihj7xn.256lev80oztuz346 \
--discovery-token-ca-cert-hash sha256:69a495502f215f3352c863e5ef52fa7229d24c3a74481a0661aa4ad65f3a2de3
到了这里一套k8s的环境就搭建完了。
4.k8s常用命令
4.1查看集群组成
kubectl get nodes
4.2查看集群状态
kubectl get cs
显示这个网上找了一些资料,大概就是说这个不影响正常使用。是因为集群条件下启动,那么controller-manager服务、scheduler服务、etcd服务可能不在一个主机上,所以这里都是unknown,不过这些服务都是正常运行的。
不管k8s怎么操作,k8s都是基于docker 运行的,所以查看docker的容器使用情况也可以看出k8s服务是否正常运行
docker ps -a
可以看到这些服务都是正常启动的。
还可以通过pod进行查看
kubectl get pod --all-namespaces -o wide
因为还未安装网络相关的服务,所以coredns服务是不运行的。
在node上查询的结果相同。
4.3安装网络服务(master)
cd /etc/kubernetes/
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
4.4查看k8s所有命名空间
kubectl get namespaces --all-namespaces
4.5查看命名空间中pod
kubectl get pod --namespace kube-system
4.6查看k8s的deployment
kubectl get deployment --all-namespaces
4.7重新生成token
因为默认的token是24小时有效期,过期了就无法在使用token加入集群了,所以当token过期后,需要重新生成token,或者设置tocken永不过期(自己玩玩就行,生产环境千万不能用)
kubeadm join 192.168.20.71:6443 --token rnnstv.3s9sc9memaiaeakp \
--discovery-token-ca-cert-hash sha256:45c8acbd18490a5ab9a7db672c09692fc81e2bd718a9ce95f35b6e0f7cb3f6cc
这个命令大致包含三个关键参数
1.master的ip
2.token
3.token-hash
#如果过期可先执行此命令
kubeadm token create #重新生成token
#列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1
5.kubeadm安装过程中发生异常
如果在kubeadm初始化之后发生错误,可以使用
kubeadm reset
进行重置kubeadm环境,然后重新使用kubeadm init进行初始化。