k8s 集群安装

kubeadm

kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署

# 创建一个 Master 节点
$ kubeadm init
# 将一个 Node 节点加入到当前集群中
$ kubeadm join <Master 节点的 IP 和端

前置要求

一台或多台机器,操作系统 CentOS7.x-86_x64
硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多集群中所有机器之间网络互通
可以访问外网,需要拉取镜像
禁止 swap 分区

部署步骤

  1. 在所有节点上安装 Docker 和 kubeadm
  2. 部署 Kubernetes Master
  3. 部署容器网络插件
  4. 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
  5. 部署 Dashboard Web 页面,可视化查看 Kubernetes 资源
    在这里插入图片描述

环境准备

准备工作
  • 我们可以使用 vagrant 快速创建三个虚拟机。虚拟机启动前先设置 virtualbox 的主机网
    络。现全部统一为 192.168.56.1,以后所有虚拟机都是 56.x 的 ip 地址
    创建虚拟机的vagrant文件如下
Vagrant.configure("2") do |config|
	(1..3).each do |i|
		config.vm.define "k8s-node#{i}" do |node|
		#设置虚拟机的Box
			node.vm.box_url = "https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box"
			node.vm.box="centos/7"

			#设置虚拟机的主机名
			node.vm.hostname="k8s-node#{i}"
			#设置虚拟机的IP
			node.vm.network "private_network",ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"
			
			#VirtaulBox相关配置
			node.vm.provider "virtualbox" do |v|
				v.name="k8s-node#{i}"
				v.memory=4096
				v.cpus=4
			end
		end
	end
end

配置网络 virtualbox ->管理->主机网络管理器
在这里插入图片描述
最终虚拟机有两个网卡
网卡1真正联网
在这里插入图片描述
网卡2是为了本机连接方便
在这里插入图片描述

#cmd中连接
vagrant ssh XXX 进去系统之后

在这里插入图片描述

#切换root用户
su root 密码为 vagrant

在这里插入图片描述

#编辑配置
vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes/no
重启服务 service sshd restart
  • 利用xshell进行连接
    ip 192.168.56100-102
    用户名为root
    密码为vagrant
linux更改配置操作
#查看网卡
ip route show
  • 由于网卡ip一样,所以创建NAT网络网卡
    全局设定->网络->右上角添加

    为每一个结点设置NAT网络
    在这里插入图片描述
  • 测试NAT是否设置成功
#查看使用的网卡 例如我的是eth0
#查看每个节点的ip eth0地址
ip addr
#互相ping
ping ip
#再ping 百度
ping www.baidu.com
#如果都ping成功则配置成功
  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭linux 安全策略 selinux
#查看配置
cat /etc/selinux/config
#禁用
sed -i 's/enforcing/disabled/' /etc/selinux/config
#进全局
setenforce 0
  • 关闭内存交换 swap
#临时的
swapoff -a
#配置永久的
sed -ri 's/.*swap.*/#&/' /etc/fstab
#查看配置
cat /etc/fstab
  • 添加主机名与 IP 对应关系
vi /etc/hosts
10.0.2.15 k8s-node1
10.0.2.4 k8s-node2
10.0.2.5 k8s-node3

指定hostname 
hostnamectl set-hostname <newhostname>:指定新的 hostnam
  • 将桥接的 IPv4 流量传递到 iptables 的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#系统应用
sysctl --system
安装Docker kubeadm kubelet kubectl
  • 安装 docker
#1. 卸载系统之前的 docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2.安装 Docker-CE
#安装必须的依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
#设置 docker repo 的 yum 位置
sudo yum-config-manager \
	--add-repo \
	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 docker,以及 docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io
#3、配置 docker 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://90iechnf.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

#4、启动 docker & 设置 docker 开机自启
systemctl enable docker
  • 添加阿里云 yum 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  • 安装 kubeadm,kubelet 和 kubectl
yum list|grep kube
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet

部署 k8s-master

  • master 节点初始化
    将k8s文件夹上传到虚拟机 进入目录 (文件 参考我的gulimall gitee文档下)
#对master_images.sh修改权限 
chomd 700 master_images.sh
#执行下载
./master_images.sh 
#检查镜像是否下载完成 docker images

下载完成后进行初始化

#apiserver-advertise-address=主机上网ip 
#由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。可以手动按照我们的 images.sh 先拉取镜像,地址变为 registry.aliyuncs.com/google_containers 也可以。
#pod是最小的部署单元
#service 对pod提供负载均衡 是多个pod的组合

kubeadm init \
--apiserver-advertise-address=10.0.2.15 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.17.3 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

成功后要执行以下两个步骤
在这里插入图片描述
科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
拉取可能失败,需要下载镜像。
运行完成提前复制:加入集群的令牌

  1. 测试 kubectl(主节点执行)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 安装 Pod 网络插件(CNI)
kubectl apply -f \
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

以上地址可能被墙,大家获取上传我们下载好的 flannel.yml 运行即可(参考gulimall gitee 文档),同时 flannel.yml 中

#由于制定好了flannel.yml文件所以只需要执行 安装
kubectl apply -f kube-flannel.yml
#删除命令为
kubectl delete -f kube-flannel.yml

指定的 images 访问不到可以去 docker hub 找一个
wget yml 的地址
vi 修改 yml 所有 amd64 的地址都修改了即可。
等待大约 3 分钟

kubectl get ns #查看名称空间
kubectl get pods -n kube-system #查看指定名称空间的 pods
kubectl get pods --all-namespaces #查看所有名称空间的 pods

网络成功状态
在这里插入图片描述

$ ip link set cni0 down 如果网络出现问题,关闭 cni0,重启虚拟机继续测试

  1. 目前 master 状态为 notready。等待网络加入完成即可。
kubectl get nodes #在master节点获取所有节点

节点状态为ready 再往里加入其他节点
在这里插入图片描述

journalctl -u kubelet #查看 kubelet 日志

token两个小时会过期
其他每一个节点加入master 节点

kubeadm join 10.0.2.15:6443 --token hvlfqz.flbrb9ljn5i2bn3l \
    --discovery-token-ca-cert-hash sha256:04e66bbbe8db1c587042128531431388f4a5444a8cbea7bab4d6e64cdce5093a 

执行 watch kubectl get pod -n kube-system -o wide 监控 pod 进度
等 3-10 分钟,完全都是 running 以后继续
Ctrl+C退出监控

最终所有节点都变为Ready状态即成功
在这里插入图片描述

作者声明

如有问题,欢迎指正!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值