K8S:docker容器其实本质上是一个linux里面的一个进程,容器本身自己是没有可再生能力的,没有高可用,而且生产环境运行容器,不可能只运行一两个,因此为了更加方便的管理众多容器,以及让容器具备高可用性,有一个东西出来了,容器编排工具。
k8s是个工具,它是管理容器的,k8s管理/调度的最小单元/单位是一个pod。
实际生产环境搭建K8S是以二进制的方式搭建的。
虚拟机搭建K8S环境至少2个vcpu
克隆三台虚拟机
修改主机名
配置静态IP
可以选择配置静态IP或者DHCP分配IP
运行脚本
3个节点分别运行同一个脚本
[root@kmaster ~]# sh Stream8-k8s-v1.27.0.sh
[root@knode1 ~]# sh Stream8-k8s-v1.27.0.sh
[root@knode2 ~]# sh Stream8-k8s-v1.27.0.sh
等待3个节点全部运行完毕后,把脚本里面第11步操作的命令,单独拷贝出来,在master节点上执行(注意,不需要在node上执行,仅在master上)
[root@kmaster ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.27.0 --pod-network-cidr=10.244.0.0/16
如果集群初始化失败,大概率都是因为网络原因,更换网络再试
[root@kmaster ~]# mkdir -p $HOME/.kube
[root@kmaster ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@kmaster ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@kmaster ~]# echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> /etc/profile
[root@kmaster ~]# source /etc/profile
[root@kmaster ~]#
[root@kmaster ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
kmaster NotReady control-plane 6m32s v1.27.0
加入其他两个节点
把生成的token命令分别在其他两个节点上执行,就会加入当前的集群
kubeadm join 192.168.100.221:6443 --token faze5f.2xcem41hpwiqiprv \
--discovery-token-ca-cert-hash sha256:79f0aaa17a84d8de2ef22237c7afb4b19cc091303d58445734d4cef4d48b8864
安装calico网络插件
[root@kmaster ~]# kubectl create -f tigera-operator-3-26-1.yaml
[root@kmaster ~]# kubectl create -f custom-resources-3-26-1.yaml
[root@kmaster ~]# watch kubectl get pods -n calico-system
所有pod全部变为running,整个集群创建成功。
现在集群状态就变为了ready
如果执行两个yaml文件之后,看不到明明空间,或者出现了其他错误。解决方案,倒着删除,重新执行。
kubectl delete -f cutomxxxx.....yaml
kubectl delete -f tigera.....yaml
先删干净,再次尝试执行
kubectl create -f tigera....yaml
kubectl create -f custom...yaml