用 kubeadm 部署 K8s 群集
前提摘要:
1, 各节点时间同步;
2, 各节点主机名称解析: dns OR hosts 3 /etc/hosts
3, 各节点 iptables 及 firewalld 服务被 disable
1:master(192.168.1.179) 组件:
配置 yum 仓库导入 docker 下载 docker-ce.repo
- wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- cd /etc/yum.repos.d/
- VIM k8s.repo #配置 kubetnetes 仓库
- [k8s]
- name=K8s Repo
- baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
- gpgcheck=0
- gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
- enabled=1
yum repolist 查看两个仓库是否能用
安装 docker-ce kubelet kubeadm kubectl
yum install docker-ce kubelet kubeadm kubectl -y
如果有报错 手动下载密钥执行下面命令
- wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
- rpm --import yum-key.gpg
初始化 docker 启动 docker 服务
- systemctl daemon-reload #重新加载文件
- systemctl start docker.service #启动 docker
- systemctl enable docker.service #设置开机自启动
- systemctl enable kubelet.service
docker 需要自动到 docker 仓库去下载镜像或者通过本地仓库下载所依赖的每个镜像文件
1, 通过 docker 自动下载依赖镜像
cd /usr/lib/systemd/system/docker.service
在 # for containers run by docker 底下加入环境变量
Environment="HTTPS_PROXY=http://www.ik8s.io:10080" 通过代理去访问需要加载的镜像文件
Environment="NO_PROXY=127.0.0.0/8,172.20.0.0/16"
2, 手动下载依赖镜像用
- kubeadm config images list
- k8s.gcr.io/kube-apiserver:v1.13.1
- k8s.gcr.io/kube-controller-manager:v1.13.1
- k8s.gcr.io/kube-scheduler:v1.13.1
- k8s.gcr.io/kube-proxy:v1.13.1
- k8s.gcr.io/pause:3.1
- k8s.gcr.io/etcd:3.2.24
- k8s.gcr.io/coredns:1.2.6
下载命令
docker pull docker.io/mirrorgooglecontainers/kube-apiserver:v1.13.1 下载镜像
docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.13.1 k8s.gcr.io/kube-apiserver:v1.13.1 给镜像打标签
- docker pull docker.io/mirrorgooglecontainers/kube-controller-manager:v1.13.1
- docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.13.1 k8s.gcr.io/kube-controller-manager:v1.13.1
- docker pull docker.io/mirrorgooglecontainers/kube-scheduler:v1.13.1
- docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.13.1 k8s.gcr.io/kube-scheduler:v1.13.1
- docker pull docker.io/mirrorgooglecontainers/kube-proxy:v1.13.1
- docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.13.1 k8s.gcr.io/kube-proxy:v1.13.1
- docker pull docker.io/mirrorgooglecontainers/pause:3.1
- docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
- docker pull docker.io/mirrorgooglecontainers/etcd:3.2.24
- docker tag docker.io/mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
- docker pull docker.io/coredns/coredns:1.2.6
- docker tag docker.io/coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
- -----------------------------------------------------------------------------
初始化 kubelet
编辑 kubelet 的配置文件 / etc/sysconfig/kubelet, 设置其忽略 Swap 启用的状态错误, 内容如下:
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
设置 kubelet 开机自启动
systemctl enable kubelet.service
初始化
- kubeadm init --kubernetes-version=v1.13.1 --pod-network-cidr=192.168.0.0/6 --service.cidr=192.168.1.0/12 --ignore-preflight-errors=Swap
- --kubernetes-version=v1.11.1 #被初始化的 k8s 版本
- --pod-network-cidr=10.244.0.0/16 #pod 使用的网络
- --service.cidr=10.96.0.0/12 #service 使用的网络地址
- --ignore-preflight-errors=Swap #双重否定部属用用交换配置
如果在初始化过程中有 error 报错那么就查看是什么错误一般会报错镜像 tag 标签错误找不到该镜像 可以把镜像重新打标签
当如果看到下列内容则表示初始化成功
- Your Kubernetes master has initialized successfully!
- To start using your cluster, you need to run the following as a regular user:
- mkdir ~/.kube #创建. kube 文件一般会提示用普通用户创建要有 sudo 权限这边我直接用 root 用户创建
- sudo cp /etc/kubernetes/admin.conf ~/.kube/ #复制 admin.conf 到./kube 文件中
- sudo chown $(id -u):$(id -g) $HOME/.kube/config #把./kube 的属组属主改为创建用户的属组属主
- You should now deploy a pod network to the cluster.
- Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
- https://kubernetes.io/docs/concepts/cluster-administration/addons/
- You can now join any number of machines by running the following on each node
- as root:
- # 用下列命令把 node 加入集群中来 (建议把下列命令保存起来)
- kubeadm join 192.168.1.179:6443 --token 5m7gg1.czd5td6itn9g2fhz --discovery-token-ca-cert-hash sha256:50c64cac88defae6beecf7bdde9b212094d7cc937b709b94f0baaeaaa4246e7e
用 root 用户创建:
- mkdir ~/.kube
- cp /etc/kubernetes/admin.conf ~/.kube/
因为应 root 用户创建的就不用重新指定属组属主
- kubectl get cs #查看组件健康状态
- kubectl get nodes #查看个节点信息
- NAME STATUS ROLES AGE VERSION
- master NotReady master 19h v1.13.1 #这边显示未开启状态因为这边少一个 flannel 插件
安装 flannel 插件
https://github.com/coreos/flannel #flannel 地址和帮助信息
图片
- # 如果你要受用安装就执行下面的命令就会自动执行安装
- kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- # 部署完之后再查看节点信息
- NAME STATUS ROLES AGE VERSION
- master Ready master 19h v1.13.1
- # 查看组件状态信息 (当前 master 运行的所有 pod 组件)
- kubectl get pods -n kube-system
- NAME READY STATUS RESTARTS AGE
- coredns-86c58d9df4-4frfz 1/1 Running 0 19h
- coredns-86c58d9df4-hlr72 1/1 Running 0 19h
- etcd-master 1/1 Running 0 19h
- kube-apiserver-master 1/1 Running 0 19h
- kube-controller-manager-master 1/1 Running 0 19h
- kube-flannel-ds-amd64-4c7jx 1/1 Running 0 19h
- kube-flannel-ds-amd64-89m8l 1/1 Running 0 17h
- kube-flannel-ds-amd64-rmxj9 1/1 Running 0 19h
- kube-proxy-8pnqs 1/1 Running 0 17h
- kube-proxy-b4hlj 1/1 Running 0 19h
- kube-proxy-fzp2m 1/1 Running 0 19h
- kube-scheduler-master 1/1 Running 0 19h
- # 默认如果不指定名名称空间则名称空间 kube-system
- kubectl get ns
- NAME STATUS AGE
- default Active 19h
- kube-public Active 19h
- kube-system Active 19h
- # 主节点初始化完成
node01 安装初始化
如果用第一种方法让 docker 自动下载依赖镜像则复制 master 中 docker.service 文件到 node01 中
把 master 中的 k8s.repo 和下载的 docker-ce 的 yum 仓库配置起来如果在 yum 过程中有报错则按照 master 中的方法执行
yum install docker-ce kubelet kubeadm -y
1, 开启 docker 服务
2, 把 docker , kubelet 设置开机自启动
- systemctl start docker.service #启动 docker
- systemctl enable docker.service #设置开机自启动
- systemctl enable kubelet.service
手动下载
kube-proxy , pause 镜像并打标签通 master 中的下载镜像配置
把 node01 节点加入集群中去
用刚刚保存的 kubeadm job 命令
kubeadm join 192.168.1.179:6443 --token 5m7gg1.czd5td6itn9g2fhz --discovery-token-ca-cert-hash sha256:50c64cac88defae6beecf7bdde9b212094d7cc937b709b94f0baaeaaa4246e7e --ignore-preflight-errors=Swap #后面加入这句话
再主节点上 kubectl get nodes 查看系欸但有没有加入进来
- kubectl get nodes
- NAME STATUS ROLES AGE VERSION
- master Ready master 20h v1.13.1
- node01 Ready <none> 19h v1.13.1 #已经加入进来了
- # node02 跟 node01 做同样步骤加入集群
来源: http://www.bubuko.com/infodetail-2994875.html