Kubernetes快速安装

2,028 阅读3分钟

配置要求

  • 3台 2核4G 的ECS
  • CentOS 7.6

安装后的软件版本为:

  • Kubernetes 1.17.0
  • Docker 19.03.5

准备ECS

先准备三台ECS,然后分别修改主机名, 配置hosts。以下操作,在三台机器上都要进行。

  • 使用 hostnamectl 命令设置主机名, 将机器一主机名改为master,将机器二、机器三改名为worker1worker2

    sudo hostnamectl set-hostname master
    sudo hostnamectl set-hostname worker1
    sudo hostnamectl set-hostname worker2
  • 配置hosts,用文本编辑器中打开 /etc/hosts 文件,然后加上以下配置

    192.168.0.154 master
    192.168.0.155 worker1
    192.168.0.156 worker2

    192.168.0.154、192.168.0.155、192.168.0.156分别是三台机器的内网IP

  • 重启实例以接受新主机名

    sudo reboot
  • 登录实例,验证主机名是否已更新

    hostname
  • 检查下防火墙是否关闭,如果开启了,请关闭

    firewall-cmd --state
  • 检查下swap是否关闭,如果开启了,请关闭

    free -g
  • 检查下selinux是否禁用,如果开启了,请关闭

    getenforce

安装Docker

先卸载旧版本的Docker

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

执行以下命令安装依赖包:

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

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。 执行下面的命令添加 yum 软件源:

$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

# 官方源
# $ sudo yum-config-manager \
#     --add-repo \
#     https://download.docker.com/linux/centos/docker-ce.repo

更新 yum 软件源缓存,并安装 docker-ce。

sudo yum makecache fast
sudo yum install docker-ce

启动 Docker 服务

sudo systemctl enable docker
sudo systemctl start docker

创建daemon.json

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

您可以通过修改daemon配置文件来使用加速器, 例如使用阿里云的镜像加速器

重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

修改 /etc/sysctl.conf

/etc/sysctl.conf中增加以下内容

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

然后,再执行命令以应用

sudo sysctl -p

安装kubelet、kubeadm、kubectl

配置K8S的yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubelet kubeadm kubectl

sudo yum install -y kubelet  kubeadm  kubectl

启动 kubelet

sudo systemctl enable kubelet
sudo systemctl start kubelet

初始化 master 节点

在 master 所在的机器通过kubeadm init命令来初始化 master, 参数说明

表头表头
apiserver-advertise-addressAPI服务器将通知它正在监听的IP地址,监听的地址为“0.0.0.0”表示本机所有IP地址。
pod-network-cidr指定pod网络的IP地址范围。如果设置,控制平面将为每个节点自动分配CIDRs
service-cidr为service 使用不同的IP地址。(默认 10.96.0.0/12)

然后我们指定选项进行初始化:

运行以下命令来初始化 master 节点

sudo kubeadm init \
    --kubernetes-version=v1.17.0 \
    --apiserver-advertise-address=192.168.0.154 \
    --pod-network-cidr=10.244.0.0/16 \
    --service-cidr=10.96.0.0/12 \
    --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers"

如果遇到以下报错

nfortunately, an error has occurred:
    timed out waiting for the condition

This error is likely caused by:
    - The kubelet is not running
    - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

检查下apiserver-advertise-address的ip是不是设的master的ip

master 节点初始化后,注意命令行最后的输出,后面会用到

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.154:6443 --token xf6jwp.qwabzranq2q8ptwb \
    --discovery-token-ca-cert-hash sha256:a62cf69bd5a6ea6ac90e8eff936e5770eaa3bfaf44ec2bdd76f1a5c391ab280b

执行kubeadm init后输出的命令

集群主节点启动之后,我们需要使用kubectl来管理集群,在开始前,我们需要设置其配置文件进行认证。

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

安装flannel网络插件

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

检查集群状态

安装完成之后,我们可以使用以下命令来检查集群组件是否运行正常:

kubectl get cs

将节点加入集群

找到使用"kubeadm init"启动主节点时打印出来的"kubeadm join"脚本, 然后分别在机器二、机器三上运行

kubeadm join 10.0.0.78:6443 --token zv6zpw.oyx2u2rhnrq6xvqk \
    --discovery-token-ca-cert-hash sha256:c8f59b16ea300f10450e9a6adc152509b20a1b0f3ece9cc3d86ab1530afe2ca6

检查初始化结果

在 master 节点上执行

kubectl get nodes

输出结果如下所示:

NAME      STATUS     ROLES    AGE     VERSION
master    Ready      master   28m     v1.17.0
worker1   Ready      <none>   8m59s   v1.17.0
worker2   NotReady   <none>   13s     v1.17.0