Centos7安装k8s集群1.15.0版本

版本说明

  • Date: 2019.7.17
  • OS:CentOS7
  • Docker:18.09.7
  • K8S: 1.15.0

安装前说明

使用kubeadm安装k8s,比起之前一个个安装组件,已经很是简单了。只不过由于国内网络问题,google的东西都被墙了,因此感受安装起来比较费劲。因此安装ks关键在如何拉取镜像,有四个方法法解决:node

  • 若是有代理,直接给docker配置代理,安装很是顺利
  • 若是没有代理,找国内阿里云等仓库,下载镜像,再把镜像的tag改为google的
  • 若是有同事或者别的机器已经下载好镜像,使用docker的save和load命令导入
  • 直接编译ks源码,打成docker镜像,该方法不适合新手。

github上有一个图形化安装k8s的项目,已经得到CNCF官方认证。 图像界面安装k8slinux

机器规划

机器名称 ip地址 角色 yum安装的组件
k8s-master 10.1.69.101 master docker、kubelet、kubeadm、kubectl
k8s-node1 10.1.69.102 node docker、kubelet、kubeadm
k8s-node2 10.1.69.103 node docker、kubelet、kubeadm

友情提示:虚拟机下安装,最好固定ip地址。特别是master节点,由于安装时,须要使用ip地址,且不能用域名。若是下次ip地址变了,可能会致使集群不可用git

准备工做

1. 安装必备软件

yum install -y wget vim net-tools epel-release
复制代码

2. 关闭swap

swapoff -a
 # 永久禁用,打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
复制代码

3. 关闭selinux

# 临时禁用selinux
setenforce 0
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

复制代码

4. 关闭防火墙

systemctl disable firewalld
systemctl stop firewalld
复制代码

安装Docker和配置代理

1. 配置yum源

## 配置默认源
## 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
 ## 下载阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 ## 刷新
yum makecache fast
 ## 配置k8s源
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
EOF
 ## 重建yum缓存
yum clean all
yum makecache fast
yum -y update

复制代码

2. 安装docker

yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker
systemctl start docker
复制代码

3. 确保kubelet使用的cgroup driver 与 Docker的一致

cat > /etc/docker/daemon.json <<EOF
{
  "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

sudo systemctl daemon-reload sudo systemctl restart docker
复制代码

4. 设置docker代理(核心步骤-若是有代理)

没有代理执行步骤5github

mkdir /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://xxx"
Environment="HTTPS_PROXY=http://xxx"
Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com"

systemctl daemon-reload && systemctl restart docker
复制代码

5. 从国内仓库拉取镜像(核心步骤-若是没有代理)

## 查看集群初始化所需镜像及对应依赖版本号,列出的就是须要下载的镜像
kubeadm config images list
复制代码
#!/bin/bash 
## 使用以下脚本下载国内镜像,并修改tag为google的tag
set -e

KUBE_VERSION=v1.15.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
CORE_DNS_VERSION=1.3.1

GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})

for imageName in ${images[@]} ; do
  docker pull $ALIYUN_URL/$imageName
  docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
  docker rmi $ALIYUN_URL/$imageName
done

复制代码

6. 配置网络代理(可选)

 ## 配置/etc/profile文件,特別是https,xxx替换为本身或本身公司的代理地址
 http_proxy=xxx
 https_proxy=xxx
 HTTP_PROXY=xxx
 HTTPS_PROXY=xxx
复制代码

开始安装k8s

1. 安装kubeadm,kubelet等

yum -y install kubelet kubeadm kubectl kubernetes-cni
systemctl enable kubelet && systemctl start kubelet
复制代码

2. 集群初始化

## master节点执行:
sudo kubeadm init \
 --apiserver-advertise-address 10.1.69.101 \
 --kubernetes-version=v1.15.0 \
 --pod-network-cidr=10.244.0.0/16
复制代码

友情提示:若是镜像没有提早拉取,这一步会比较慢。配置了代理的话,可执行:kubeadm config images pull, 单独拉取镜像chrome

若是是kubeadm reset卸载后再安装,可能报错,加入这个参数:--ignore-preflight-errors=alldocker

获得回复:shell

(...省略)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
 ## 保存好该命令,丢了很差找回。节点加入时须要
kubeadm join 10.1.69.101:6443 --token ou5pvo.qseafc4s8licblzy \
    --discovery-token-ca-cert-hash sha256:de9c10f11c50c074f212698b9d514fc12a9c1c4ffe70961aff89ac5e585f0663
复制代码

3. 拷贝配置,给kubectl使用

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

4. 安装flannel网络

sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
 ## 查看flannal是否安装成功

sudo kubectl -n kube-system get po -l app=flannel -o wide
复制代码

5. node节点加入集群

其余节点执行:json

kubeadm join 10.1.69.101:6443 --token ou5pvo.qseafc4s8licblzy \
    --discovery-token-ca-cert-hash sha256:de9c10f11c50c074f212698b9d514fc12a9c1c4ffe70961aff89ac5e585f0663
复制代码

清理安装

  • 若是安装过程当中出任何问题,能够重置后从新安装
sudo kubeadm reset
复制代码

Dashboard插件安装

1. 下载插件并配置

  • 下载yaml文件到本地vim

    wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
    复制代码
  • 配置dashboard界面能够在虚拟机以外访问centos

  • 配置准入控制(不然各类没有权限访问)

    • K8S在1.6版本之后启用了RBAC访问控制策略
    • vim添加dashboard-rbac.yaml文件,内容以下
    apiVersion: v1
    kind: ServiceAccount
    metadata:
     name: dashboard
     namespace: kube-system
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
     name: dashboard
    subjects:
     - kind: ServiceAccount
     name: dashboard
     namespace: kube-system
    roleRef:
     kind: ClusterRole
     name: cluster-admin
     apiGroup: rbac.authorization.k8s.io
    复制代码

2. 执行安装

  • 开始安装

    sudo kubectl apply -f kubenetes-dashboard.yaml
    sudo kubectl appy -f dashboard-rbac.yaml
    复制代码
  • 查看dashboard是否安装成功

    ## 下载镜像须要必定时间,看pod处于running表示安装成功
    kubectl get pod -n kube-system |grep kubernetes-dashboard
    复制代码

3. 登陆界面查看

  • 用Firefox查看dashboard页面(chrome没法访问不安全的https)

    注意:url中地址必须用https!!!

  • 进入到输入token界面

  • 获取token命令

    ## 获取登录界面token
    kubectl -n kube-system describe $(kubectl -n kube-system \
    get secret -n kube-system -o name | grep namespace) | grep token
    
    复制代码
  • 进入dashboard首页

  • 若是dashboard的token过时,如下脚本从新生成config文件

    #!/bin/bash
    TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}')
    kubectl config set-credentials kubernetes-admin --token="${TOKEN}"
    复制代码

遇到的问题

  • load导入镜像报错,找不到tmp文件。

save导出的时候没有指定image的tag

  • The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled

kubeadm init时,apiserver的地址写错了

  • [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables

  • NetworkPlugin cni failed to set up pod, network: failed to set bridge addr: "cni0" already has an IP address different from

kubeadm reset, 重置节点,从新加入

相关文章
相关标签/搜索