如需转载分享,请标明出处,且不用于盈利为目的,谢谢合作!
在前两章的基础上使用Kubeadm部署安装k8s集群
环境准备:
Linux虚拟机 | IP |
---|---|
k8s-master | 192.168.17.140 |
k8s-node1 | 192.168.17.141 |
1.设置IP、主机名映射
vi /etc/hosts
192.168.17.140 k8s-master
192.168.17.141 k8s-node1 (然后重启reboot)
2.关闭防火墙
查看防火墙状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld
关闭防火墙开机启动
systemctl disable firewalld
3.禁用SELINUX
临时关闭,用于关闭selinux防火墙,但重启后失效
setenforce 0
关闭selinux,将SELINUX=enforcing修改为disabled
vi /etc/selinux/config
SELINUX=disabled
重启系统
reboot
查看selinux的状态
/usr/sbin/sestatus
4.注释掉 SWAP 的自动挂载
vi /etc/fstab(注释/dev/mapper/centos-swap这行)
5.创建/etc/sysctl.d/k8s.conf文件,添加如下内容
关闭swap,保证 kubelet正确运行
swapoff -a
创建k8s.conf文件
vi /etc/sysctl.d/k8s.conf
#文件内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
使其生效
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
6.kube-proxy开启ipvs的前置条件
保证在节点重启后能自动加载所需模块
cat > /etc/sysconfig/modules/ipvs.modules <
授权并加载内核模块
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
查看是否已经正确加载所需的内核模块
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
安装ipset软件包
yum install ipset
为了便于查看ipvs的代理规则,安装管理工具ipvsadm
yum install ipvsadm
7.安装Docker
yum install -y yum-utils device-mapper-persistent-data lvm2
配置yum源路径
方式一、阿里云的yum源(推荐)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
方式二、docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
查看可安装Docker版本
yum list docker-ce.x86_64 --showduplicates |sort -r
建立元数据缓存
yum makecache fast
安装docker,有时会因为网络问题下载有问题会报错,可以重复安装试试
yum install -y --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7
启动docker
systemctl start docker
设置开机自启docker,否则kubeadm会报错,要求必须设置开机自启
systemctl enable docker
确认一下iptables filter表中FOWARD链的默认策略(policy)为ACCEPT
iptables -nvL
如果不是ACCEPT,则修改
iptables -P FORWARD ACCEPT
8.使用kubeadm部署Kubernetes
创建配置文件文件kubernetes.repo
vi /etc/yum.repos.d/kubernetes.repo
文件内容用阿里云的,也可以用其他的
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
enable=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
建立元数据缓存并安装kubelet,kubeadm,kubectl,不指定版本默认最新版本
yum makecache fast && yum install -y kubelet-1.12.1
yum makecache fast && yum install -y kubeadm-1.12.1
yum makecache fast && yum install -y kubectl-1.12.1
9.初始化集群
查看对应的镜像版本
kubeadm config images list
创建shell脚本
vi k8s.sh
脚本内容
docker pull mirrorgooglecontainers/kube-apiserver:v1.12.1
docker pull mirrorgooglecontainers/kube-controller-manager:v1.12.1
docker pull mirrorgooglecontainers/kube-scheduler:v1.12.1
docker pull mirrorgooglecontainers/kube-proxy:v1.12.1
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
docker pull coredns/coredns:1.2.2
docker tag mirrorgooglecontainers/kube-apiserver:v1.12.1 k8s.gcr.io/kube-apiserver:v1.12.1
docker tag mirrorgooglecontainers/kube-controller-manager:v1.12.1 k8s.gcr.io/kube-controller-manager:v1.12.1
docker tag mirrorgooglecontainers/kube-scheduler:v1.12.1 k8s.gcr.io/kube-scheduler:v1.12.1
docker tag mirrorgooglecontainers/kube-proxy:v1.12.1 k8s.gcr.io/kube-proxy:v1.12.1
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag coredns/coredns:1.2.2 k8s.gcr.io/coredns:1.2.2
docker rmi mirrorgooglecontainers/kube-apiserver:v1.12.1
docker rmi mirrorgooglecontainers/kube-controller-manager:v1.12.1
docker rmi mirrorgooglecontainers/kube-scheduler:v1.12.1
docker rmi mirrorgooglecontainers/kube-proxy:v1.12.1
docker rmi mirrorgooglecontainers/pause:3.1
docker rmi mirrorgooglecontainers/etcd:3.2.24
docker rmi coredns/coredns:1.2.2
运行脚本,下载所需镜像
bash k8s.sh
查看本地镜像是否下载了所需镜像
docker image ls
关闭系统的Swap
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--fail-swap-on=false
10.使用kubeadm init 初始化集群
设置kubelet服务开机自启
systemctl enable kubelet.service
#初始化集群,版本和apiserver地址写自己对应的,Swap首字母大写,不然无效
kubeadm init \
--kubernetes-version=v1.12.1 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.17.140 \
--ignore-preflight-errors=Swap
–apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。
–pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr 有自己的要求,这里设置为 10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个CIDR
出现下列信息则表示成功,记录kubeadm join 命令,节点加入时候用到
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.17.140:6443 --token puj2pk.vikiv0azxb5lvhyq --discovery-token-ca-cert-hash sha256:7ef06a337742750ae0d443627ef0eec0d1ec985976b5840eaf0cb07226df5fa4
不管是管理员还是非管理员用户,最好都运行一下,不然关机重启系统之后可能有各种错误
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
11.到这里就可以运行kubectl命令,进行查看等等操作
查看组件状态信息
kubectl get cs
获取节点信息,现在的主节点状态为NotReady,原因是没有配置网络
kubectl get nodes
12.Flannel部署
方式1在线安装:
安装的过程需要点时间,因为需要下载镜像
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/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
方式2本地安装(推荐):
如果按照上述在线安装,重新安装需要先删除所创建的网络配置
kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
我们有了本地的镜像文件:
链接:https://pan.baidu.com/s/1CB_iwmuiQNjoSDgMRhcqfA
提取码:hck0
复制这段内容后打开百度网盘手机App,操作更方便哦
可以使用docker load将本地保存的镜像再次导入docker中。
docker load --input flannel.tar 或 docker load < flannel.tar
导入完镜像后,执行命令
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
可以通过下列命令查看是否成功
查看quay.io/coreos/flannel镜像是否下载到本地
docker image ls
查看master节点状态是否从notReady变成Ready
kubectl get nodes
查看pods具体信息,运行的所有pod,会发现有flannel的pod
kubectl get pods -n kube-system -o wide
13.k8s-node1节点的安装步骤
(1)k8s-node1节点上操作参照上面1.到7.步骤
(2)节点加入集群
创建kubernetes.repo配置文件
可以参照上面8.步骤,也可以直接将k8s-master节点创建好的文件copy过来,copy命令如下:
scp /etc/yum.repos.d/kubernetes.repo k8s-node1:/etc/yum.repos.d/kubernetes.repo
准备镜像,这里我是将k8s-master节点上的镜像利用docker命令打包转义到k8s-node1节点
在k8s-master节点,将8个镜像打包
docker save \
k8s.gcr.io/kube-proxy \
k8s.gcr.io/kube-controller-manager \
k8s.gcr.io/kube-scheduler \
k8s.gcr.io/kube-apiserver \
k8s.gcr.io/etcd \
k8s.gcr.io/coredns \
quay.io/coreos/flannel \
k8s.gcr.io/pause \
-o k8s_all_image.tar
复制到k8s-node1机器上
scp k8s_all_image.tar k8s-node1:k8s_all_image.tar
切换到k8s-node1节点,导入镜像
docker load -i k8s_all_image.tar
(3)安装kubelet,kubeadm
建立元数据缓存并安装kubelet,kubeadm
kubectl命令是操作客户端,因为操作基本都在master节点,所以node节点可以不安装,要是喜欢也可以安装
不指定版本,则默认安装最新版本
k8s-node1上执行命令
yum makecache fast && yum install -y kubelet-1.12.1
yum makecache fast && yum install -y kubeadm-1.12.1
在k8s-master节点将认证文件复制到k8s-node1节点
scp /etc/kubernetes/admin.conf k8s-node1:/etc/kubernetes/admin.conf
(4)k8s-node1节点上执行命令关闭swap
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--fail-swap-on=false
(5)k8s-node1节点上执行命令,加入集群
设置kubelet服务开机自启
systemctl enable kubelet.service
执行之前记录的join命令,加入集群
kubeadm join 192.168.17.140:6443 --token puj2pk.vikiv0azxb5lvhyq --discovery-token-ca-cert-hash sha256:7ef06a337742750ae0d443627ef0eec0d1ec985976b5840eaf0cb07226df5fa4
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
切换到k8s-master节点查看节点信息
kubectl get nodes
注意:如果k8s-node1节点加入失败,可以尝试kubeadm reset
,然后重新kubeadm join
一次
至此安装k8s集群完成!!!