Kubeadm部署Kubernetes集群

Kubeadm部署Kubernetes1.14.1集群

原理
kubeadm做为集群安装的“最佳实践”工具,目标是通过必要的步骤来提供一个最小可用的集群运行环境。它会启动集群的基本组件以及必要的附属组件,至于为集群提供更丰富功能(比如监控,度量)的组件,不在其安装部署的范围。在环境节点符合其基本要求的前提下,kubeadm只需要两条基本命令便可以快捷的将一套集群部署起来。
这两条命令分别是:

kubeadm init:初始化集群并启动master相关组件,在计划用做master的节点上执行。

kubeadm join:将节点加入上述集群,在计划用做node的节点上执行。

一、环境说明

主机名 IP地址 角色 系统
k8s-node-1 192.168.11.131 k8s-master Centos7.6
k8s-node-2 192.168.11.134 k8s-node Centos7.6
k8s-node-3 192.168.111.133 k8s-node Centos7.6

注意:官方建议每台机器至少双核2G内存,同时需确保MAC和product_uuid唯一(参考下面的命令查看)

ip link
cat /sys/class/dmi/id/product_uuid

注:Kubernetes大致有以下几种安装方式:

直接yum安装,yum install -y kubernetes 这样最快,但是此版本较低
去github上下载,用ansible部署安装,但需要对ansible有一定的了解
在每个节点(Master/Node)上按组件逐一安装,慎用,有可能会崩溃,特别复杂,而且还不一定搞好。
利用一些提供的安装工具来安装,如kubeadm,下边介绍这个安装方式

二、环境配置

以下命令在三台主机上均需运行

1、设置阿里云yum源(可选)

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
rm -rf /var/cache/yum && yum makecache && yum -y update && yum -y autoremove

2、安装依赖包

yum install -y epel-release conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

3、关闭防火墙

systemctl stop firewalld && systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT

4、关闭SELinux

setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

5、关闭swap分区

swapoff -a
sed -i ‘/ swap / s/^\(.*\)$/#\1/g‘ /etc/fstab

6、加载内核模块

modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
modprobe -- br_netfilter
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

7、设置内核参数

cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

sysctl -p /etc/sysctl.d/k8s.conf

8、安装Docker

1、首先卸载旧版:

yum remove docker            docker-client            docker-client-latest            docker-common            docker-latest            docker-latest-logrotate            docker-logrotate            docker-selinux            docker-engine-selinux            docker-engine

2、安装依赖包:

yum install -y yum-utils device-mapper-persistent-data lvm2

3、设置安装源(阿里云):

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、启用测试库(可选):

yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test

5、安装:

yum makecache fast
yum install -y docker-ce  安装docker最新版

6、启动:

systemctl start docker

开机自启

systemctl enable docker

Docker建议配置阿里云镜像加速

安装完成后配置启动时的命令,否则docker会将iptables FORWARD chain的默认策略设置为DROP

另外Kubeadm建议将systemd设置为cgroup驱动,所以还要修改daemon.json

sed -i "13i ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT" /usr/lib/systemd/system/docker.service

mkdir  -p  /etc/docker
tee /etc/docker/daemon.json <<-‘EOF‘
{
  "registry-mirrors": ["https://bk6kzfqm.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

systemctl daemon-reload
systemctl restart docker

9、安装kubeadm和kubelet

配置源

cat <<EOF > /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

yum makecache fast

安装

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet

10、拉取所需镜像

先从阿里云拉取所需的镜像,不然会从谷歌拉取,导致拉取失败。

拉取镜像:

kubeadm config images list | sed -e ‘s/^/docker pull /g‘ -e ‘s#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g‘ | sh -x
docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk ‘{print "docker tag",$1":"$2,$1":"$2}‘ | sed -e ‘s/registry.cn-hangzhou.aliyuncs.com\/google_containers/k8s.gcr.io/2‘ | sh -x
docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk ‘{print "docker rmi """$1""":"""$2}‘ | sh -x

三、初始化集群

以下命令如无特殊说明,均在k8s-node-1上执行

1、使用kubeadm init初始化集群(注意修改最后为本机IP)

kubeadm init   --kubernetes-version=v1.14.1   --pod-network-cidr=10.244.0.0/16   --apiserver-advertise-address=192.168.11.128

初始化成功后会输出类似下面的加入命令,暂时无需运行,先记录。

kubeadm join 192.168.11.131:6443 --token duz8m8.njvafly3p2jrshfx --discovery-token-ca-cert-hash sha256:60e15ba0f562a9f29124914a1540bd284e021a37ebdbcea128f4e257e25002db

2、为需要使用kubectl的用户进行配置

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOM![](http://image.mamicode.com/info/201905/20190516092712619550.png)
E/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

检查集群状态

kubectl get cs

3、安装Pod Network(使用七牛云镜像)

curl -o kube-flannel.yml https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sed -i "s/quay.io\/coreos\/flannel/quay-mirror.qiniu.com\/coreos\/flannel/g" kube-flannel.yml
kubectl apply -f kube-flannel.yml
rm -f kube-flannel.yml

使用下面的命令确保所有的Pod都处于Running状态,可能要等到许久。

kubectl get pod --all-namespaces -o wide

4、向Kubernetes集群中添加Node节点

k8s-node-2k8s-node-3上运行之前在k8s-node-1输出的命令

kubeadm join 192.168.11.131:6443 --token duz8m8.njvafly3p2jrshfx --discovery-token-ca-cert-hash sha256:60e15ba0f562a9f29124914a1540bd284e021a37ebdbcea128f4e257e25002db

在k8s-node1上查看集群中的节点状态,可能要等等许久才Ready

kubectl get nodes

![](https://s1.51cto.com/images/blog/201905/15/1f4dc5c14adedd1ba0c91e44316884da.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

如果添加集群失败,重置从节点配置
kubeadm reset

5、kube-proxy开启ipvs

kubectl get configmap kube-proxy -n kube-system -o yaml > kube-proxy-configmap.yaml
sed -i ‘s/mode: ""/mode: "ipvs"/‘ kube-proxy-configmap.yaml
kubectl apply -f kube-proxy-configmap.yaml
rm -f kube-proxy-configmap.yaml
kubectl get pod -n kube-system | grep kube-proxy | awk ‘{system("kubectl delete pod "$1" -n kube-system")}‘

四、部署kubernetes-dashboard

1、生成访问证书

grep ‘client-certificate-data‘ ~/.kube/config | head -n 1 | awk ‘{print $2}‘ | base64 -d >> kubecfg.crt
grep ‘client-key-data‘ ~/.kube/config | head -n 1 | awk ‘{print $2}‘ | base64 -d >> kubecfg.key
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

将生成的kubecfg.p12证书导入到Windows中,直接双击打开,下一步导入即可。

注意:导入完成后需重启浏览器。

2、生成访问Token

新建文件admin-user.yaml:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

创建角色及绑定账号

kubectl create -f admin-user.yaml

获取Token

kubectl describe secret admin-user --namespace=kube-system

此次先记录下生成的Token,一会登录要用

3、部署kubernetes-dashboard

curl -o kubernetes-dashboard.yaml https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
vi kubernetes-dashboard.yaml
修改image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1为:
image: mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
kubectl apply -f kubernetes-dashboard.yaml

4、访问

https://192.168.11.131:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

192.167.11.131为MasterIP,6443为apiserver-port

然后在登录选项中选择令牌登录,复制进刚刚生成的令牌即可。

注:如果访问不了网站,则

查所有的Pod确保都处于Running状态,如果 pod kubectl get pod --all-namespaces -o wide不是Running状态则删除再新建

kubectl get pod --all-namespaces -o wide

kubectl delete pod kubernetes-dashboard-68ddcc97fc-bqxsd

重新起kubernetet-dashboard

kubectl apply -f kubernetes-dashboard.yaml

如果kubernetes-dashboard-68ddcc97fc-bqxsd 还是起不来则导入

docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1

重新起kubernetet-dashboard

kubectl apply -f kubernetes-dashboard.yaml

原文地址:https://blog.51cto.com/14237756/2395311

时间: 2024-08-28 06:14:08

Kubeadm部署Kubernetes集群的相关文章

使用kubeadm部署kubernetes集群

使用kubeadm部署kubernetes集群 通过docker,我们可以在单个主机上快速部署各个应用,但是实际的生产环境里,不会单单存在一台主机,这就需要用到docker集群管理工具了,本文将简单介绍使用docker集群管理工具kubernetes进行集群部署. 1 环境规划与准备 本次搭建使用了三台主机,其环境信息如下:| 节点功能 | 主机名 | IP || ------|:------:|-------:|| master | master |192.168.1.11 || slave1

基于kubeadm部署kubernetes集群(一)

一.主机规划 角色名称 配置 域名 IP地址 master 2C8G/4G master.example.com 192.168.0.1 node1 2C4G/2G node1.example.com 192.168.0.2 node2 2C4G/2G node2.example.com 192.168.0.3 二.软件要求 操作系统版本: CentOS Linux release 7.3.1611 (Core) Docker版本:1.13.1, build 07f3374/1.13.1 Kub

Kubernetes学习之路(一)之Kubeadm部署K8S集群

一个星期会超过多少阅读量呢??发布一篇,看看是否重新在51上写学习博文,有老铁支持嘛?? 使用kubeadm部署集群 节点名称 ip地址 部署说明 Pod 网段 Service网段 系统说明 k8s-master 192.168.56.11 docker.kubeadm.kubectl.kubelet 10.244.0.0/16 10.96.0.0/12 Centos 7.4 k8s-node01 192.168.56.12 docker.kubeadm.kubelet 10.244.0.0/1

Kubernetes/3.使用Kubeadm部署k8s集群

使用Kubeadm部署k8s集群 kubeadm是一个提供了"kubeadm init"和"kubeadm join"最佳实践命令,且用于快速构建一个kubernetes集群的工具,你可以使用此工具快速构建一个kubernetes学习环境.通过本章节的学习,你将能够使用kubeadm工具,成功构建出一个基础的kubernetes集群环境. 环境准备 Hosts文件准备 Docker环境配置 其他准备工作 使用Kubeadm部署k8s集群 参考文档 备注 环境准备 i

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver 2018/1/4 配置 LB 指向 kube-apiserver 小目标:在 3 个 master 节点前,还需配置一个 LB 来作为 apiserver 的入口 LB -> master x3 直接使用阿里云内网 SLB L4 proxy 资源(本次实例是 4 层而不使用 7 层的原因是:跳过了处理证书的环节) 申请下来资源后,将得到一个 vip 指向上述 3 个 master 节点的 IP 作为后端真实服务器 注

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver 2018/1/4 配置 kubectl 访问 kube-apiserver 切换 master 节点连接到本节点的 apiserver 确认集群信息 切换 master 节点连接到本节点的 apiserver ### 为了在这 2 个新的节点执行 kubectl 需要配置 admin.yaml [[email protected] ~]# mkdir -p ~/k8s_install/master/admi

使用kubeadm部署k8s集群01-初始化

使用kubeadm部署k8s集群01-初始化 2018/1/3 节点配置 master x3 OS version: centos7 swapoff ### 阿里云默认:off hosts ### 每个节点上配置: [[email protected] ~]# cat /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 Docker version: latest(17.0

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点 2018/1/4 扩容 kube-scheduler 到 3 节点 连接到本节点的 apiserver [[email protected] kube-controller-manager]# cat /etc/kubernetes/manifests/kube-scheduler.yaml |grep '/etc/kubernetes' --kubeconfig=/etc/kubernetes/scheduler.

使用kubeadm部署k8s集群09-配置worker节点

使用kubeadm部署k8s集群09-配置worker节点 2018/1/4 配置 worker 节点 初始化 加入集群 切换 worker 节点连接到 apiserver 的 LB 入口 调整集群中节点角色和调度策略 初始化 /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 k8s worker @envDev 10.10.9.74 tvm-0310.10.9.75 t