server2
kubeadm config print init-defaults #查看默认配置信息

默认从k8s.gci.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库:

kubeadm config images list --image-repository registry.aliyuncs.com/google_containers #列出所需镜像
rpm -q kubeadm #kubeadm可以部署更低的版本
#kubeadm config images pull -image-repository registry.aliyuncs.com/google_containers #拉取镜像
#kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers #初始化集群
--pod-network-cidr=10.244.0.0/16 #使用flannel网络组件时必须添加
--kubernetes-version #指定k8s安装版本
server1
docker images
docker images | grep -v REPOSITORY #列出所有镜像
docker images | grep -v REPOSITORY | awk '{system("docker rmi "$1":"$2"")}'
docker ps
docker images
df -h /

kubeadm images kubeadm images list_容器


使用相同命令拉取镜像

kubeadm images kubeadm images list_kubeadm images_02


再把这些镜像上传到私有仓库中,再仓库中新建一个项目

kubeadm images kubeadm images list_容器_03


公开

docker images | grep aliyuncs
把这些镜像改成私有层过滤源
docker images | grep aliyuncs | awk '{print $1":"$2}'
docker images | grep aliyuncs | awk '{print $1":"$2}' | awk -F/ '{system("docker tag "$0" reg.westos.org/k8s/"$3"")}' $0表示全部 F/表示
docker images
docker images | grep k8s | awk '{system("docker push "$1":"$2"")}'
server2 做管理端
kubeadm config images list --image-repository reg.westos.org/k8s
kubeadm config images pull --image-repository reg.westos.org/k8s
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s #--pod-network-cidr=10.244.0.0/16这个选项是为了给后面flannel插件准备的
docker ps 整个k8s的组件都是通过容器来运行的。
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl get node

kubeadm images kubeadm images list_docker_04


其中生成的是连接集群的证书

kubectl get pod -n kube-system
echo "source <(kubectl completion bash)" >> ~/.bashrc
source .bashrc #使之生效 ,交互时使用kubectl
kubectl get pod --all-namespaces #缺少网络组件,则会出现以下情况
kubectl get node

kubeadm images kubeadm images list_kubernetes_05

vim .bash_profile

kubeadm images kubeadm images list_ci_06


添加网络组件,在以下位置

kubeadm images kubeadm images list_容器_07

yum install -y wget

kubeadm images kubeadm images list_容器_08

ls
vim kube-flannel.yml
在命令模式下 /image

我们都是在内网环境下部署的,所以,以后就是把镜像全部放在私有仓库中。

server1

kubeadm images kubeadm images list_kubeadm images_09


kubeadm images kubeadm images list_docker_10


仓库中的镜像和配置文件里的进行吻合,因为每个节点上的私有仓库已经提前设置好了,所以文件中指向的所有镜像路径都是指向私有仓库的。只要确保私有仓库中有那个项目就可以。然后再把镜像往其中放。

kubeadm images kubeadm images list_kubernetes_11

server1

kubeadm images kubeadm images list_ci_12


kubeadm images kubeadm images list_容器_13


kubeadm images kubeadm images list_kubeadm images_14

server2
kubectl apply -f kube-flannel.yml 如果出现警告忽略。
kubectl get pod -n kube-system
kubectl get node

kubeadm images kubeadm images list_kubernetes_15


其他节点只需要执行以下指令,剩下的不用动

kubeadm images kubeadm images list_kubernetes_16

server2
kubectl get node 确保其余节点准备就绪
kubectl get pod --all-namespaces 容器状态必须是running,这个时候就可以部署集群。
kubeadm token list 一般token过了24小时就过期了,要重新create

kubeadm images kubeadm images list_docker_17


其他节点上没有.bash_profile,所以不能操作集群的,会出现以下情况

kubeadm images kubeadm images list_docker_18

server2
cat /etc/kubernetes/admin.conf #证书得时间是一年。
ls
kubectl get ns
kubectl get node

初始化过程中遇到的问题:

kubeadm images kubeadm images list_ci_19


镜像后面是none的,在删除的时候,后面加镜像id删除

kubectl logs kube-proxy-nccp2 -n kube-system #查看有问题的服务
kubectl describe pod kube-proxy-nccp2 -n kube-system #可以查看具体信息,可以列出来pod在初始化过程中遇到的什么问题,比如镜像没有拉取。-n kube-system 列出指定的namespace.
docker ps

添加时,一定要重置

kubeadm reset

有的时候因为它已经运行起来了,会控制防火墙,会在防火墙中添加很多策略,也会导致网络有问题。

在其他节点,可以reset重启之后,可以自动把iptables刷掉

kubeadm images kubeadm images list_容器_20


以上代码是把节点上的所有pod全部删除。

如果在init和join上出现问题,只需要执行以下两条命令就可以了

kubeadm images kubeadm images list_docker_21

server2
kubectl get nodes

删除节点在master上进行

kubeadm images kubeadm images list_容器_22


kubeadm images kubeadm images list_docker_23