ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用kubeadm部署k8s

2020-07-07 13:09:09  阅读:453  来源: 互联网

标签:kube 部署 v1.14 gcr io kubeadm k8s docker


三、集群部署

ip 系统环境 主机名
192.168.130.11 CentOS 7.6 Kube-master
192.168.130.12 CentOS 7.6 Kube-node1
192.168.130.13 CentOS 7.6 Kube-node2

3.1 部署前准备

3.1.1 主机名解析

vim /etc/hosts
192.168.130.11 kube-master
192.168.130.12 kube-node1
192.168.130.13 kube-node2

3.1.2 时间同步

yum install chrony
systemctl start chronyd
systemctl enable chronyd

3.1.3 禁用swap

swapoff -a

并且注释/etc/fstab所有与swap相关的行

3.3.4 关闭防火墙

setenforce 0
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

systemctl stop firewalld
systemctl disable firewalld

3.3.5 加载ipvs内核模块

安装 IPVS 模块

yum -y install ipvsadm ipset sysstat conntrack libseccomp

设置开机加载配置文件

cat >>/etc/modules-load.d/ipvs.conf<<EOF
ip_vs_dh
ip_vs_ftp
ip_vs
ip_vs_lblc
ip_vs_lblcr
ip_vs_lc
ip_vs_nq
ip_vs_pe_sip
ip_vs_rr
ip_vs_sed
ip_vs_sh
ip_vs_wlc
ip_vs_wrr
nf_conntrack_ipv4
EOF

设置开机加载 IPVS 模块

systemctl enable systemd-modules-load.service   # 设置开机加载内核模块
lsmod | grep -e ip_vs -e nf_conntrack_ipv4      # 重启后检查 ipvs 模块是否加载

3.3.6 下载 Docker 和 K8S

设置docker源

curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

设置k8s源

cat >>/etc/yum.repos.d/kuberetes.repo<<EOF
[kuberneres]
name=Kubernetes
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
EOF

安装 docker-ce 和 kubernetes

yum install docker-ce kubelet kubectl kubeadm -y
systemctl start docker
systemctl enable docker
systemctl enable kubelet

3.3.7 设置内核及k8s参数

设置内核参数

cat >>/etc/sysctl.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

设置kubectl忽略swap,使用ipvs

cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
KUBE_PROXY_MODE=ipvs
EOF

3.2 部署Master

本小节的所有操作,只在Master上进行

3.2.1 拉取镜像

宿主机最好能访问国外资源,在kubeadm init 在初始化的时候会到谷歌的 docker hub 拉取镜像,如果宿主机测试无法访问 k8s.gcr.io

如果条件不允许可以参考:https://blog.csdn.net/jinguangliu/article/details/82792617,解决镜像问题。

  • 提前拉取初始化需要的镜像
kubeadm config images pull

  • 拉取其他源镜像
docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2
docker pull mirrorgooglecontainers/kube-proxy:v1.14.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1


利用`kubeadm config images list` 查看需要的docker image name

k8s.gcr.io/kube-apiserver:v1.14.2
k8s.gcr.io/kube-controller-manager:v1.14.2
k8s.gcr.io/kube-scheduler:v1.14.2
k8s.gcr.io/kube-proxy:v1.14.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

# 修改tag

docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2
docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
docker tag docker.io/mirrorgooglecontainers/etcd:3.3.10  k8s.gcr.io/etcd:3.3.10
docker tag docker.io/mirrorgooglecontainers/pause:3.1  k8s.gcr.io/pause:3.1
docker tag docker.io/coredns/coredns:1.3.1  k8s.gcr.io/coredns:1.3.1

docker rmi `docker images |grep docker.io/ |awk '{print $1":"$2}'`

3.2.2 初始化Master

使用 kubeadm 初始化 k8s 集群

kubeadm init \
    --apiserver-advertise-address=0.0.0.0 \
    --apiserver-bind-port=6443 \
    --kubernetes-version=v1.18.5 \
    --pod-network-cidr=10.10.0.0/16 \
    --service-cidr=172.31.0.0/16 \
    --service-dns-domain=pansn.local \
    --image-repository=k8s.gcr.io \
    --ignore-preflight-errors=swap \
  --token-ttl=0

下面是最后执行成功显示的结果,需要保存这个执行结果,以让 node 节点加入集群

注意最后一行的kubeadm join命令,后面在加入node节点时要用

  • 如果初始化过程被中断可以使用下面命令来恢复
kubeadm reset
  • 最好以普通用户的身份运行下面的命令
# 在当前用户家目录下创建.kube目录并配置访问集群的config 文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.2.3 部署 flannel 网络插件

  • 下载falannel.yml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 修改配置
[root@kube-master opt]# vim kube-flannel.yml

改成之前初始化时pod-network-cidr选项对应的值

  • 部署 flannel 网络插件
[root@kube-master opt]# kubectl apply -f kube-flannel.yml

3.2.4 检查k8s集群状态

  • 查看 kube-system 命名空间中运行的 pods
kubectl get pods -n kube-system

  • 查看 k8s 集群组件的状态
kubectl get ComponentStatus

 kubectl get nodes

3.2.5 配置命令补全

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

3.3 部署node节点

本小节的所有的操作,只在 Node 节点上进行

3.3.1 加入集群

加入集群,注意在命令尾部加上 –ignore-preflight-errors=Swap ,以忽略 k8s 对主机 swap 的检查(k8s为了性能所以要求进制 swap

 kubeadm join 192.168.130.11:6443  \
       --ignore-preflight-errors=swap \
     --token 70hwi7.omp6t2nfwfsg4y87 \
    --discovery-token-ca-cert-hash sha256:f4b7ea9af19c749e3e6447ceb8803c8c1d563fc3e2452e7d4422246ad4dfb0b4

返回结果,表示加入集群成功

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

编写最后命令写成脚本以便后续使用

3.3.2 查看进度

  • node查看镜像

当 node 节点加入 K8S 集群中后,Master 会调度到 Node 节点上一些组件,用于处理集群事务,这些组件没有下载完成之前 Node 节点在集群中还是未就绪状态

在 node 执行下面命令,可以查看镜像的下载进度,下面是最终结果显示

最终显示结果

[root@kube-node1 ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy    v1.18.5             a1daed4e2b60        11 days ago         117MB
quay.io/coreos/flannel   v0.12.0-amd64       4e9f801d2217        3 months ago        52.8MB
k8s.gcr.io/pause         3.2                 80d28bedfe5d        4 months ago        683kB

可以在 Master 上使用下面命令来查看新加入的节点状态

[root@kube-master ~]# kubectl get nodes 
NAME          STATUS   ROLES    AGE     VERSION
kube-master   Ready    master   82m     v1.18.5
kube-node1    Ready    <none>   7m14s   v1.18.5
kube-node2    Ready    <none>   4m17s   v1.18.5

  • node查看集群组件状态
kubectl get pods -n kube-system -o wide

问题汇总:

K8s集群初始化成功后,kubectl get nodes 查看节点信息时报错

解决方法:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.3.3 解决镜像下载慢问题

node 节点需要翻墙下载镜像太慢,建议使用 docker 镜像的导入导出功能 先将master的三个镜像打包发送到node节点,load后再jion

  • 导出
docker image save -o /tmp/kube-proxy.tar k8s.gcr.io/kube-proxy
docker image save -o /tmp/flannel.tar quay.io/coreos/flannel
docker image save -o /tmp/pause.tar k8s.gcr.io/pause
  • 导入
docker image load -i /tmp/kube-proxy.tar
docker image load -i /tmp/pause.tar
docker image load -i /tmp/flannel.tar

参考

标签:kube,部署,v1.14,gcr,io,kubeadm,k8s,docker
来源: https://www.cnblogs.com/pansn/p/13260135.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有