之前是用kubernetes-master和kubernetes-node实现自动安装,但是其实这并不利于我理解和学习kubernetes,所以再一次我决定手动来完成一次安装部署以及配置,因为反正kubernetes是分布式的,本来就要装多台,我就每一台用不同的方式来装
首先上张图,有利于清楚的了解master和node的区别,它们各自工作的组件
服务架构
去阿里云开源镜像站[https://developer.aliyun.com/mirror/],因为网易镜像站上根本就没有kubernetes,如下图
然后配置yum源,就可以使用yum安装了,不同系统的配置方法都有介绍
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
ps: 由于官网未开放同步方式, 可能会有索引gpg检查失败的情况, 这时请用 yum install -y --nogpgcheck kubelet kubeadm kubectl 安装
master安装配置操作(主要难点都集中在master主机上),默认以安装docker环境
1:大前提:firewalld,selinux,swap都要关闭,都在会失败
systemctl stop firewalld
setenforce 0
swapoff -a
以上是暂时关闭,若要永久关闭
vim etc/fstab //将swap注释掉
systemctl disable firewalld //永久关闭防火墙
vim /etc/selinux/config //设置为disabled
2:修改IP地址、主机和host解析
Keepalived安装(master节点安装)
yum -y install keepalived
keepalived配置
保留默认配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived_default.conf
写入新的配置
vim /etc/keepalived/keepalived.conf
global_defs {
router_id master
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.130
}
}
说明:
特别注意红色字体文本,master是主机名称(如果有其他主机则使用对应的主机名称进行替换),ens33是网卡名称(每个linux系统可能不一致),192.168.0.130是虚拟IP
启动keepalived
service keepalived start && systemctl enable keepalived
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
IP查看
在master机器上执行
ip a
使用kubeadm非常方便:
• 用户只需运行几个命令即可:
kubeadm init //初始化
kubectl apply -f <network-of-choice.yaml> //安装网络插件
kubeadm join --token :
考虑到初始化中镜像的拉取会大大延长时间,所以这里我们事先把需要的镜像都给获取下来,所以执行
kubeadm config images list
可以得知需要那些镜像并提前拉取
可以一个一个拉取并打上标签,或者也可以用脚本一次性拉取,自己搞定,
方式如下,如果不会这种脚本,就一个一个拉取再打标签,也不多
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
done
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0 //手动获取
第一步
kubeadm init \
--apiserver-advertise-address=*192.168.0.113* \ //master的IP地址
--apiserver-bind-port 6443 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ //镜像地址
--kubernetes-version v1.18.0 \ //kubernetes版本
--service-cidr=10.96.0.0/12 \ //服务网段
--pod-network-cidr=192.168.0.0/16 //pod网段
kubeadm初始化需要指定一些参数master的IP地址请工具自己主机修改,镜像站这里用国内阿里云,否则会失败,kubernetes 的版本自己注意检验service网段就用它自己默认的就可以了。还有最后一项,也是非常重要的,那就是pod网段,这个网段的选择有涉及到你到底用哪一种网络插件,我用的是calico插件,所以网段就设为192.168.0.0/16,而网络插件有众多,如用flannel网络插件则要设置为10.244.0.0/16,这个具体要去官网查看
kubernetes官方网址
好了,这个过程可能非常漫长,也许会失败,那就要重新再来
kubeadm reset
如果成功了,那么就根据提示执行操作
root用户执行以下操作
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
若是普通用户,还要添加下面的操作
sudo chown $(id -u):$(id -g) $HOME/.kube/config
另外要把kubeadm token 口令记下来,免得遗忘,即便遗忘,可执行如下操作
kubeadm token create --print-join-command --ttl 0 //有效期为永久
其他node节点加入就需要用到这个口令.
执行下面操作,检查是否安装成功以及集群状态
kubectl get nodes
kubectl get cs
会发现master处于notready状态,需安装calico网络,前面说过了,我这里使用calico网络,执行以下操作即可
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
node节点安装部署
同样安装kubeadm,kubectl,kubelet,注意node也和master有相同的要求,docker,关闭firewalld,selinux,swap
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
拉取kube-proxy的镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0 //手动获取
执行加入口令(node节点执行)
kubeadm join 192.168.0.113:6443 --token cwrzki.n8imjzp9sk0h7pch --discovery-token-ca-cert-hash sha256:4058d1501bbae7c0bbfcfe7e15f62f9c951d3b5e5748ebe1bf3f4546be4b1db1
到master节点检查
kubectl get nodes
会发现node2的角色(ROLES)为none,这是为什么呢,因为我们还没有为其打上标签,执行如下操作
[root@master ~]# kubectl label node node2 node-role.kubernetes.io/node=node
可以看见node2的role已经改变了,但是这里status变为notready,没关系,因为节点长时间不操作自然就会改变状态