K8S系列(一)kubeadm部署
一、 介绍
1. 对于k8s这个东西的介绍,博主不在这里做过多的赘述,因为比博主解释的清楚的博客到处都是.
2. 大概总结一下就是:
它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
3. 能达到的效果:
快速部署/回滚
自动弹性伸缩
滚动升级
4. k8s能非常方便的帮助我们管理微服务集群,是我们开发和运维必备的一项知识
5. 所以博主也就不多说理论了,理论知识清查看其他更专业的博客
6. 博主会基于kubeadm(官方社区推出的一个用于快速部署kubernetes集群的工具)和二进制包的两种方式
来对咱们的k8s做一个部署搭建
7. 本文会以kubeadm的方式来部署
二、 准备工作(每台机器都需要)
- 机器准备
角色 | ip | 主机名 |
---|
master | 192.168.3.4 | hostnamectl set-hostname master | node1 | 192.168.3.5 | hostnamectl set-hostname node1 | node2 | 192.168.3.6 | hostnamectl set-hostname node2 | node3 | 192.168.3.7 | hostnamectl set-hostname node3 |
-
关闭防火墙 2.1 systemctl stop firewalld 2.2 systemctl disable firewalld -
关闭selinux(建议永久) 3.1 sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 3.2 setenforce 0 #临时 -
关闭swap(建议永久) 4.1 sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久 4.2 swapoff -a # 临时 -
对应上面表格,将hostname设置一下 -
本地host添加映射
cat >> /etc/hosts << EOF
192.168.3.4 master
192.168.3.5 node1
192.168.3.6 node2
192.168.3.7 node3
EOF
- 将桥接的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 # 生效
- 时间同步一下
8.1 yum install -y ntpdate 8.2 ntpdate time.windows.com #生效
三、 部署
- 安装Docker(所有节点)
1.wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-O /etc/yum.repos.d/docker-ce.repo
2.yum -y install docker-ce-18.06.1.ce-3.el7
3.systemctl enable docker
4.systemctl start docker
5.docker --version
6.cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://xxxxxxxx"]
}
EOF
7.systemctl restart 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(所有节点)
1.yum install -y kubelet-1.18.0
2.yum install -y kubeadm-1.18.0
3.yum install -y kubectl-1.18.0
4.systemctl enable kubelet
- 部署Master
4.1 执行下面命令来初始化
kubeadm init
--apiserver-advertise-address=192.168.3.4 # 这个是master的ip
--image-repository registry.aliyuncs.com/google_containers #使用阿里云源
--kubernetes-version v1.18.0 #指定版本
--service-cidr=10.96.0.0/12 # 这个和下面的配置只要不和本机网段冲突即可,自行定义,这个可以通用
--pod-network-cidr=10.244.0.0/16 #这个可以通用
4.2 看下图,根据提示可以看到初始化成功的字样.
4.3 按照提示进行以下指令操作来初始化我们的集群
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.4 将下面图的最后一个红色框框的内容,分别在其他的node节点执行,此操作是将其他node节点加入到当前集群.
******注意*********
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
4.5 kubectl get nodes #查看集群节点状态,当前查看都是NotReady状态,此时我们还需要继续进行网络插件配置
(下面图是上面4.2图) (下面图是上面4.5图)
- 部署Flannal网络插件.目的是为集群中的所有节点创建一个新的网卡,让不同节点的docker网卡都在同一个里面(master节点)
5.1 wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml #下载文件
5.2 kubectl apply -f kube-flannel.yml #应用
5.3 kubectl get nodes #查看集群节点状态,此时节点已经全部ready了
(下面是上方5.3的图)
- 到这一步,咱们已经是基于kubeadm将集群完整的搭建完了.下一步咱们会部署一个nginx来测试一下
6.1 编写nginx的deploment-yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deployment
template:
metadata:
labels:
app: nginx-deployment
spec:
containers:
- name: nginx-deployment
image: nginx
ports:
- containerPort: 80
6.2 kubectl apply -f xxx.yaml
我们还需要配置一下svc,把端口暴露出去
6.3 编写svc文件
apiVersion: v1
kind: Service
metadata:
name: nginxsvc
spec:
type: NodePort
selector:
app: nginx-deployment
ports:
- port: 80
nodePort: 30000
targetPort: 80
6.4 执行 kubectl create -f xxxx.yaml
6.5 执行 kubectl get pods,svc
(下面是上方6.2)
(下面是上方6.5)
- 访问 http://192.168.3.4:30000会发现 nginx正常运行了
四、总结
1.按照以上步骤,咱们已经完整的搭建了一个基于kubeadm的k8s集群.并且已经完成了测试
2.但是这个并不是完全体,细心的朋友会发现,咱们的[master]节点目前存在单点问题,没有做高可用
3.这个稍微要麻烦一下,博主后面再抽空发一篇针对高可用的部署.
4.毕竟博主只是个后端开发,并不是运维人员,生产上的部署肯定不会让博主来处理的.
5.但是对于咱们后端开发来说,可以不要你部署,但是流程你要知道.
6.希望本文能帮到大家,如有不对的地方欢迎指正
|