目录
1.安装docker-ce并配置docker镜像加速器和驱动
K8s集群角色 | 主机名 | 安装的组件 |
控制节点 | hd1.com | docker-ce、kubeadm、kubelet、kubectl、calico |
工作节点 | hd2.com | docker-ce、kubeadm、kubelet、kubectl、 |
工作节点 | hd3.com | docker-ce、kubeadm、kubelet、kubectl、 |
Kubernetes架构
k8s的物理架构是master/node模式:
K8S集群至少需要一个主节点(Master)和多个工作节点(Worker),Master节点是集群的控制节点,负责整个集群的管理和控制,主要用于暴露API、调度部署和对节点进行管理。工作节点主要是运行容器的。
kubelet 负责启动容器或pod
kube-proxy负载均衡
pod是最小调度单元
pod封装一个或多个容器
部署及测试
1.安装docker-ce并配置docker镜像加速器和驱动
安装docker-ce
[root@hd1.com ~]# yum install doc -y ker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io
[root@hd1.com ~]# systemctl start docker && systemctl enable docker.service
配置docker镜像加速器和驱动
[root@hd1.com ~]#vim /etc/docker/daemon.json
{
"registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
#修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。
[root@hd1.com ~]# systemctl daemon-reload && systemctl restart docker
[root@hd1.com ~]# systemctl status docker
上述操作三台机器步骤相同。
2.安装初始化k8s需要的软件包
[root@hd1.com ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
[root@hd1.com ~]# systemctl enable kubelet && systemctl start kubelet
[root@hd1.com]# systemctl status kubelet
查看kubelet状态
#上面可以看到kubelet状态不是running状态,这个是正常的,不用管,等k8s组件起来这个kubelet就正常了。
重复此操作到hd2.com和hd3.com上。
注:每个软件包的作用
Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
kubelet: 安装在集群所有节点上,用于启动Pod的
kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
3.kubeadm初始化k8s集群
#把初始化k8s集群需要的离线镜像包上传到hd1.com、hd2.com、hd3.com机器上,手动解压:
[root@hd1.com ~]# docker load -i k8simage-1-20-6.tar.gz
[root@hd2.com ~]# docker load -i k8simage-1-20-6.tar.gz
[root@hd3.com ~]# docker load -i k8simage-1-20-6.tar.gz
#使用kubeadm初始化k8s集群(在master节点上操作)
[root@hd1.com ~]# kubeadm init --kubernetes-version=1.20.6 --apiserver-advertise-address=192.168.1.11 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification
#上面生成的信息是把node节点加入集群用的命令,每个人都不同。
#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
[root@hd1.com ~]# mkdir -p $HOME/.kube
[root@hd1.com ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@hd1.com ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@hd1.com ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
hd1.com NotReady control-plane,master 60s v1.20.6
此时集群状态还是NotReady状态,因为没有安装网络插件 ,角色已经改变为master。
4. 扩容k8s集群-添加工作节点
使用刚才生成的命令,将hd2.com和hd3.com加入k8s集群
也可是使用下列命令重新生成一个命令。
[root@hd1.com ~]# kubeadm token create --print-join-command
下面在两台工作节点上运行此命令(操作相同)
[root@hd2.com~]# kubeadm join 192.168.1.11:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a
#看到上面说明hd2.com和hd3.com节点已经加入到集群了,充当工作节点
#在hd1.com上查看集群节点状况:
[root@hd1.com ~]# kubectl get nodes
#可以看到hd2.com、hd3.com已经加入集群,角色为空,<none>就表示这个节点是工作节点。
#可以把hd2.com和hd3.com的ROLES变成work,按照如下方法:
[root@hd1.com ~]# kubectl label node hd2.com node-role.kubernetes.io/worker=worker
[root@hd1.com ~]# kubectl label node hd3.com node-role.kubernetes.io/worker=worker
# hd2.com、hd3.com的ROLES角色已经改变。(通过更改label标签来实现)
5.安装kubernetes网络组件-Calico
上传calico.yaml到hd1.com上,使用yaml文件安装calico 网络插件 。
[root@hd1.com ~]# kubectl apply -f calico.yaml
查看pod和集群状态
[root@hd1.com ~]# kubectl get pods -n kube-system
[root@hd1.com ~]# kubectl get nodes
#STATUS状态是Ready,说明k8s集群正常运行了。
6.测试在k8s创建pod是否可以正常访问网络
#把busybox-1-28.tar.gz上传到hd2.com、hd3.com节点,手动解压
[root@hd2.com ~]# docker load -i busybox-1-28.tar.gz
[root@hd3.com ~]# docker load -i busybox-1-28.tar.gz
#master联网测试
[root@hd1.com ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
#进入shell后ping www.baidu.com测试网络
#通过上面可以看到能访问网络,说明calico网络插件已经被正常安装了。
7.测试k8s集群中部署tomcat服务
测试k8s集群中部署tomcat服务
#把tomcat.tar.gz上传到hd2.com、hd3.com,手动解压
[root@hd2.com ~]# docker load -i tomcat.tar.gz
[root@hd3.com ~]# docker load -i tomcat.tar.gz
[root@hd1.com ~]# kubectl apply -f tomcat.yaml
[root@hd1.com ~]# kubectl get pods
查看ip地址
[root@hd1 ~]# kubectl get pods -o wide|grep 10
[root@hd1.com ~]# kubectl apply -f tomcat-service.yaml
[root@hd1.com ~]# kubectl get svc
#在浏览器访问hd2.com节点的ip:30080即可请求到浏览器
至此k8s的基本部署就已经完毕了。