Centos7安装k8s集群1.15.0版本

时间:2022-07-26
本文章向大家介绍Centos7安装k8s集群1.15.0版本,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

版本说明

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

安装前说明

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

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

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

机器规划

机器名称

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地址变了,可能会导致集群不可用

准备工作

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 < /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 <复制代码

4. 设置docker代理(核心步骤-如果有代理)

没有代理执行步骤5

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, 单独拉取镜像

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

得到回复:

(...省略)
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节点加入集群

其他节点执行:

kubeadm join 10.1.69.101:6443 --token ou5pvo.qseafc4s8licblzy 
    --discovery-token-ca-cert-hash sha256:de9c10f11c50c074f212698b9d514fc12a9c1c4ffe70961aff89ac5e585f0663

清理安装

  • 如果安装过程中出任何问题,可以重置后重新安装
sudo kubeadm reset

Dashboard插件安装

1. 下载插件并配置

  • 下载yaml文件到本地 wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
  • 配置dashboard界面可以在虚拟机之外访问
  • 配置准入控制(否则各种没有权限访问)
    • 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

遇到的问题

  • 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, 重置节点,重新加入