master节点的组件介绍
master节点是集群管理中心,它的组件可以在集群内任意节点运行,但是
为了方便管理所以会在一台主机上运行Master所有组件,并且不在此主机
kube-apiserver 用于暴露kubernetes API,任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行
集群 一般都是为单数,最少3台起步;
坑已经排干净了,照着做肯定能搭建好
1. 准备3台服务器
vi /etc/hosts
192.168.0.11 master
192.168.0.12 node1
192.168.122.13 node2
2. 关闭所有的selinux 和 防火墙
systemctl stop firewalld
systemctl disable firewall
systemctl stop firewalld
systemctl disable firewall
3. 安装iptables 并启动
yum install iptables-services -y
systemctl restart iptables
systemctl enable iptables
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -F -t raw
iptables -L
service iptables save
4. 所有节点 时间同步 ntp
5. 所有节点准备yum源(在centos默认源的基础上再加上以下两个yum源)
vim /etc/yum.repos.d/kubernetes.repo //复制下面的配置
[k8s] name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/ku-bernetes-el7-x86_64/
enabled=1
gpgcheck=0
6. wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
7. 关闭所有节点的swap 必须关闭
swapoff -a
vim /etc/fstab
将带有 swap defaults 0 0 那一行注释掉
8. vi /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
保存退出
sysctl -p /etc/sysctl.d/k8s.conf
modprobe br_netfilter
lsmod |grep br_netfilter
9. 所有节点设置kube-proxy开启ipvs的前置条件
vi /etc/sysconfig/modules/ipvs.modules
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4
保存退出
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
lsmod |egrep 'ip_vs|nf_conntrack'
10. 所有节点安装软件 ,必须安装docker-ce 不能安装老版本的docker
yum list docker-ce.x86_64 --showduplicates | sort -r
yum install docker-ce-18.09.8-3.el7 docker-ce-cli-18.09.8-3.el7 --setopt=obsoletes=0 -y
docker -vdocker -v
systemctl start docker
systemctl enable docker
11. 所有节点配置加速器和将cgroupdrivier改为systemd,并重启docker服务
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://42h8kzrh.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
保存退出
systemctl restart docker
12. 所有节点安装kubelet kubeadm kubectl并启动
yum install kubelet-1.15.1-0 kubeadm-1.15.1-0 kubectl-1.15.1-0 -y
systemctl enable kubelet
13. kubeadm 初始化,在master节点操作,其他节点不操作,此项操作会下载镜像,时间会长一些
kubeadm init --kubernetes-version=1.15.1 --apiserver-advertise-address=192.168.122.11 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.2.0.0/16 --pod-network-cidr=10.3.0.0/16
// cidr是虚拟出来的地址段,用于k8s内网通讯
//安装完以后 在最后几段会有一个
// Your Kubernetes control-plane has initialized successfully!
// 看到这个还没完,还需要复制一个这个信息,是master节点对node节点开放注册的一个token
// 看到有一行命令是 kubeadmin join 192.168.xx你的内网IP --token 这句话 全都提前复制下来
14. 验证
docker images
//出现很多镜像代表OK
15. 启动集群,在master节点操作
systemctl status kubelet.service
vim /etc/profile
//在最后一行加入
export KUBECONFIG=/etc/kubernetes/admin.conf
//保存退出
source /etc/profile
// 查看集群状态
kubectl get cs
// 查看集群的各个node节点
kubectl get node
16. 创建flannel网络
mkdir /home/k8s
cd /home/k8s/
curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
//应用flannel
kubectl apply -f kube-flannel.yml
// 确认所有Pod都是runing状态
kubectl get pods -n kube-system
//如果初始化错误,清理一下再初始化,清理命令为:
kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
17. 验证master OK
kubectl get nodes
//看到下面的输出代表正常
// master Ready master 66m v1.15.1
18. 加入其它节点
// 在node1和node2上加入到 master集群,执行本文章的第13条最后一个注释,把kubeadm join的命令复制出来 执行
kubeadm join 内网IP:6443 --token cyoesa.wyuw7x30j0hqu7sr --discovery-token-ca-ce
// 上面的命令是加入一个work节点到集群,如果是k8s多主多从架构,加入master角色到集群,则在命令后加:--experimental-control-plane
//验证是否集群部署成功, 在Master节点执行
kubectl get nodes
//看到输出 都是ready状态即可
master Ready master 88m v1.15.1
node1 Ready <none> 3m42s v1.15.1
node2 Ready <none> 101s v1.15.1
19. 假如移除节点2的做法
// 在master节点执行
kubectl drain node2 --delete-local-data --force --ignore-daemonsets
kubectl delete node node2
// 在Node2节点上执行
kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
// 在node1节点上执行
kubectl delete node node2