k8s集群搭建
k8s安全学习
搭建k8s集群
使用kubeadm搭建 1 node 1 master 的集群、网络插件使用flannel
即可
准备两台Ubuntu虚拟机搭建
关闭防火墙和swap
关闭iptables/ufw: service ufw stop
关闭swap: swapoff -a
然后每台机器上安装好docker
https://www.runoob.com/docker/ubuntu-docker-install.html
在所有节点上安装 kubectl kubelet kubeadm
kubeadm
:用来初始化集群的指令。kubelet
:在集群中的每个节点上用来启动 pod 和容器等。kubectl
:用来与集群通信的命令行工具。
# apt-get update && apt-get install -y apt-transport-https
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y kubectl kubelet kubeadm国内请使用aliyun源:
# sudo apt-get update && apt-get install -y apt-transport-https
# sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# sudo apt-get update# apt-get install -y kubectl kubelet kubeadm
初始化master节点
pod网络插件是必要安装,以便pod可以相互通信. 请提前确认自己需要使用的pod网络插件,以Flannel为例,为了使Flannel正常工作,执行kubeadm init命令时需要增加--pod-network-cidr=10.244.0.0/16参数
# kubeadm init --pod-network-cidr=10.244.0.0/16 # k8s.gcr.io可以访问的情况下可以直接执行init
# kubeadm init --control-plane-endpoint="192.168.52.130:6443" --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 # 通过跳转registry的方式安装以上两种init的方式自己根据情况选择执行
如果这里报错的解决方案
https://www.fons.com.cn/118262.html
成功如图
保存这个token
kubeadm join 192.168.52.130:6443 --token 0jh5re.0ita4ui5nz02raw9 \
--discovery-token-ca-cert-hash sha256:9119db494baca8874d1046b6bd778c5cce384651ed38f40617c0c123cc030dd7
kubectl认证
集群主节点启动之后,我们需要使用kubectl来管理集群,在开始前,我们需要设置其配置文件进行认证。
使用kubectl工具 【master节点操作】\
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
执行完成后,我们使用下面命令,查看我们正在运行的节点
kubectl get nodes
能够看到,目前有一个master节点已经运行了,但是还处于未准备状态
下面我们还需要在Node节点执行其它的命令,将node1和node2加入到我们的master节点上
加入node节点
下面我们需要到 node1 和 node2服务器,执行下面的代码向集群添加新节点
执行在kubeadm init输出的kubeadm join命令:
kubeadm join 192.168.52.130:6443 --token 3x8we4.ic6vjbo3o8imzl0i \
--discovery-token-ca-cert-hash sha256:481b379f469771693d03b1d572c9d32e892e6686059bcb4bb032fc1774f5f447
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
加入了之后就有了两个节点
复制admin.conf并且设置配置
为了在工作节点上也能使用kubectl,而kubectl命令需要使用kubernetes-admin来运行,因此我们需要将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下
复制完成之后,我们就可以设置kubectl的配置文件了,以便我们在工作节点上也可以使用kubectl来管理k8s集群:
#设置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
至此,k8s工作节点的部署初步完成。接下来,我们需要以同样的方式将其他工作节点加入到集群之中。
查看集群节点状态
集群创建完成之后,我们可以输入以下命令来查看当前节点状态:
至此,node节点也可以使用kubectl了!
部署CNI网络插件
flannel
上面的状态还是NotReady,下面我们需要网络插件,来进行联网访问
kubectl get pods -n kube-system
命令将列出“kube-system”命名空间下的所有pod并且以表格状输出pod的相关附加信息(节点名称)。
# 添加
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 命令“kubectl apply”可以用于创建和更新资源,以上命令使用了网络路径的yaml来进行创建flanner 也就是说,可以不下载到本地,直接利用网络路径进行apply
# 查看状态 【kube-system是k8s中的最小单元】
kubectl get pods -n kube-system
连不上GitHub的解决方案
https://blog.csdn.net/weixin_38074756/article/details/109231865
中间报了个小错,解决一下
https://blog.csdn.net/shm19990131/article/details/106517283/
搭建完成
第二条起来发现有节点不工作
kubectl describe pod/coredns-6d8c4cb4d-qjlf8 --namespace kube-system
kubectl logs -f pod/coredns-6d8c4cb4d-qjlf8 --namespace kube-system
kubectl get pods -n kube-system
kubectl get nodes
命令查看日志
最后还是重装了一下,不知道问题