服务器列表

服务器名 服务器IP 服务器配置 角色
d-master 172.17.3.146 4C 8G master
d-worker01 172.17.3.151 4C 8G worker
d-worker02 172.17.3.152 4C 8G worker

系统:CentOS Linux release 7.9.2009

一、基础优化所有节点执行

1.1、修改主机名

  1. echo "d-master" >/etc/hostname
  2. hostname d-master

1.2、安装常用包

yum install net-tools gcc bash-completion -y
source /etc/profile.d/bash_completion.sh

1.3、提示符高亮

cp /root/.bashrc /root/.bashrc.bak
cat >> /root/.bashrc <<EOF
PS1="\[\e[32;1m\][\u@\h \W]\\$ \[\e[0m\]"
EOF

#生效配置文件
source /root/.bashrc

1.4、更新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
yum -y update

1.5、同步主机时间

yum install ntp -y
systemctl enable ntpd.service
systemctl start ntpd.service
systemctl status ntpd.service

1.6、关闭swap,注释swap分区

swapoff -a
vim /etc/fstab

1.7、配置内核参数,将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

二、安装docker-ce

所有节点安装

2.1 安装依赖包

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

2.2 设置Docker源

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

2.3 docker安装版本查看

yum list docker-ce --showduplicates | sort -r

2.4 安装docker

$ yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y
指定安装的docker版本为18.09.9

2.5 启动Docker

$ systemctl start docker && systemctl enable docker

2.6 镜像加速

由于Docker Hub的服务器在国外,下载镜像会比较慢,可以配置镜像加速器。主要的加速器有:Docker官方提供的中国registry mirror、阿里云加速器、DaoCloud 加速器,本文以阿里加速器配置为例。

配置daemon.json文件
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://sx67cqfl.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

2.7 验证

docker --version

2.8 修改Cgroup Driver

修改daemon.json,新增‘”exec-opts”: [“native.cgroupdriver=systemd”’

$ vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

#重新加载docker
$ systemctl daemon-reload && systemctl restart docker.service

修改cgroupdriver是为了消除告警:
[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/

[

](https://kubernetes.io/docs/setup/cri/)

三、k8s安装

control plane和work节点都执行本部分操作。

3.1 添加阿里kubernetes源

$ 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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3.2 版本查看

yum list kubelet --showduplicates | sort -r

3.3 安装kubelet、kubeadm和kubectl

$ yum clean all && yum -y makecache
$ yum install -y kubelet-1.18.9 kubeadm-1.18.9 kubectl-1.18.9

如果不加版本号,默认安装最新版本,如果安装错误,可以使用yum remove kubectl kubelet kubeadm 移除,重新安装。
如果安装其他版本kubernetes时,请确认docker-ce和当前的kubernetes的版本相匹配,具体可查询:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#dependencies-11

3.4 启动kubelet

启动kubelet并设置开机启动

systemctl enable kubelet && systemctl start kubelet

第一次安装k8s,未经过kubeadm init 或者 kubeadm join后,kubelet状态是未启动,这个是正常现象,执行init或join后问题会自动解决,此时不用理会kubelet.service

3.5 kubectl命令补全

echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile

四、初始化k8s 集群

master节点执行

4.1 查询kubeadm config所需的镜像

$ kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.18.9
k8s.gcr.io/kube-controller-manager:v1.18.9
k8s.gcr.io/kube-scheduler:v1.18.9
k8s.gcr.io/kube-proxy:v1.18.9
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

4.2 下载镜像

vim images.sh
#!/bin/bash
url=registry.cn-beijing.aliyuncs.com/api_public
version=v1.18.9
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
  docker pull $url/$imagename
done

url为阿里云镜像仓库地址,我已经提前下载并上传,version为安装的kubernetes版本。

#运行脚本image.sh,下载指定版本的镜像

$ chmod a+x images.sh &&  ./image.sh
$ docker images

4.3 master初始化

kubeadm init --kubernetes-version=1.18.9  \
--apiserver-advertise-address=172.17.3.146   \
--image-repository registry.cn-beijing.aliyuncs.com/api_public  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

注:此处image-repository 也可为 registry.aliyuncs.com/google_containers
记录kubeadm join的输出,后面需要这个命令将work节点和其他control plane节点加入集群中。

#注意这里的结果每次输出会不同,不能直接复制下面的结果执行。
kubeadm join 172.17.3.146:6443 --token o68ntb.dbgizeo4vl90x18v \
    --discovery-token-ca-cert-hash sha256:5176be0c6f3cd95cbf6d2f4520ce39e6e635d8c41b2887e0b3fb44b28a505dec

如果初始化失败,可执行kubeadm reset后重新初始化

$ kubeadm reset
$ rm -rf $HOME/.kube/config

4.4 加载环境变量

$ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
$ source .bash_profile
本文所有操作都在root用户下执行,若为非root用户,则执行如下操作:

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

4.5 安装flannel网络

在master上新建flannel网络

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

查询部署

$ kubectl get pod,service -n kube-system

五、worker节点加入集群

5.1 worker节点加入集群(worker节点执行)

获取上面4.3 master初始化生成的work节点加入集群的命令

kubeadm join 172.17.3.146:6443 --token o68ntb.dbgizeo4vl90x18v \
    --discovery-token-ca-cert-hash sha256:5176be0c6f3cd95cbf6d2f4520ce39e6e635d8c41b2887e0b3fb44b28a505dec

此时worker节点会拉取kube-proxy,pause,flannel镜像并启动两个pod容器,在worker节点使用docker ps可以看出两个容器正在启动。

5.2 集群节点查看 (master控制节点执行)

根据网络和服务器配置不同,worker节点经过几分钟初始化后,master节点上即可查看节点状态。

$ kubectl get nodes
$ kubectl get pod -n kube-system

六、Dashboard搭建

ref:http://blog.zachinachshon.com/k8s-dashboard/