在开始今天的k8s集群安装之前,再次提醒各位读者保存一下当前的镜像,方便出现不必要的问题可随时回退。该篇将实现一个最简版的k8s集群,并通过一个小demo来验证集群安装的成功与否。另外,本文的命令操作如果没有特殊说明,每台机器都要执行,如果某台机器需要单独执行的命令,本文会特殊说明。另外将本文的参考博客也列出如下,感谢前辈们的无私付出,读者也可自行参考。
https://blog.csdn.net/networken/article/details/84991940
https://blog.csdn.net/java_zyq/article/details/82149869
#配置kubernetes源
cat <
/etc/yum.repos.d/kubernetes.repo
[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
#安装 kubelet 、kubeadm、 kubectl
yum install -y kubelet kubeadm kubectl
#启动kubelet
systemctl enable kubelet && systemctl start kubelet
#master节点安装,说明:pod-network-cidr(pod节点网络初始化);kubernetes-version(安装的k8s版本);apiserver-advertise-address(主节点的 IP 地址);image-repository(k8s初始化的镜像,这里配置为阿里云的镜像,否则会去google的库拉取镜像,由于国内不能访问其官网镜像,如果不配置 ,这里会报拉取镜像出错的问题。网上还提供了另外一种解决方案,通过github和dockerhub配合使用,拉取镜像,大家也可以自行尝试)。此过程因为要拉取镜像,所以过程可能会很慢,请大家耐心等待。
kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.18.2 --apiserver-advertise-address=192.168.23.130 --image-repository=registry.aliyuncs.com/google_containers
#很不幸的是这里面报了一个错,我们的master并没有初始化成功,
#然而意外之喜的是,这里k8s初始化的镜像已经帮我们拉下来了,哈哈,有得也有失吗
docker images
#我猜想可能是拉取镜像的时间太长,导致我们的k8s主节点没有初始化成功,这里我们重置一下k8s的kubeadm,然后再次执行上面的命令
kubeadm reset
#再次执行上面的命令
kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.18.2 --apiserver-advertise-address=192.168.23.130 --image-repository=registry.aliyuncs.com/google_containers
#居然成功了,有木有。这里我们将以下命令代码记录下来,方便后面其它节点执行该命令加入到我们的集群中
kubeadm join 192.168.23.130:6443 --token 6rc83u.nh3m19pypf024dw7 --discovery-token-ca-cert-hash sha256:cf73c46a33f6abae1bfc9eb6ef29050ddaadc3c7be880ec8cbe26fb4b2c42aaa
#按照提示我们还需要执行三个命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#安装calico网络插件
kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml
#查看节点
kubectl get nodes
#查看pod节点,这里如果status如果没有显示为running状态,可能还在启动容器组件,请耐心等待一会,这里我们pod的网络也安装好了
kubectl -n kube-system get pods
#work01执行我们上面保存的命令,work02同work01,这里不再赘述。
kubeadm join 192.168.23.130:6443 --token 6rc83u.nh3m19pypf024dw7 --discovery-token-ca-cert-hash sha256:cf73c46a33f6abae1bfc9eb6ef29050ddaadc3c7be880ec8cbe26fb4b2c42aaa
这里如果没有记录此命令在初始化完主节点的时候,也可以在主节点执行以下命令获取
kubeadm token create --print-join-command
#查看node节点,我们的从节点已经加入到集群中
kubectl get nodes
#查看pod状态
kubectl -n kube-system get pods -o wide
#部署一个 Nginx Deployment,包含6个Pod副本
cat > nginx.yaml <
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 6
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
EOF#创建nignx应用
kubectl apply -f nginx.yaml
#设置服务
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service
#查看服务
kubectl get svc
#访问一下我们的nginx,看是否已经部署成功,这里只能访问从节点,主节点只负责pod的创建和调度等,当然也可以把主节点部署pod,我们后面再说。
curl 192.168.23.131:30699
curl 192.168.23.132:30699
#查看一下我们的pod,确实有6个副本
kubectl get pod
#查询master节点的taints污点状态
kubectl describe nodes | grep Taints
#master节点发布为node节点,去掉taints污点
kubectl taint node k8s-master node-role.kubernetes.io/master-
#还原操作
kubectl taint node k8s-master node-role.kubernetes.io/master=:NoSchedule
#在主节点执行以下命令,这里以work01为例
kubectl drain k8s-work01 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-work01
#在k8s-work01节点上执行以下命令,重置节点
kubeadm reset -f
到这里就又到了和大家说再见的时候了,本次的k8s集群安装也就结束了,虽然言尤未尽。但是总归要结束的,虽然以上大多都是来自网上博客的内容,但也是作者辛苦尝试出来的,遇到了许多的问题,最终得以以一个成功的东西展示给大家,希望对你有一点点帮助都是好的,创作不易,如有错误,恳请批评指出,本人一定虚心接受,加以改正,如果能得到您的一个小小的赞,会更加的开心,哈哈,那么今天就到这里了,我们下期见。