k8s安装配置指南

kubeadm安装

安装kubeadm

kubeadm是为了简化集群安装过程引入的工具

大致步骤为换源,然后包管理工具安装以下套件

yum install -y kubelet kubeadm kubectl

修改kubeadm的默认配置

kubeadm config print init-defaults # 输出kubeadm init默认参数
kubeadm config print join-defaults # 输出kubeadm join的默认参数

使用以下命令将默认配置保存备用

kubeadm config print init-defaults > init.default.yaml

下载kubenetes相关镜像

为了加快k8s创建集群过程,可预先下载images

kubeadm config images list # 查看镜像列表
kubeadm config images pull --config=init-config.yaml# 预下载镜像
kubeadm config images pull --image-repository=http://registry.cn-hangzhou.aliyuncs.com/google_containers  # 或者这样

:如果访问不了k8s.gcr.io,则需修改/etc/docker/daemon.json中的registry-mirrors项,改为国内地址。

换源是个很麻烦的问题,以下是另一种方案

kubeadm config images list # 查看所需镜像列表
images=(  # 下面的镜像应该去除"k8s.gcr.io/"的前缀,版本换成上面获取到的版本
    kube-apiserver:v1.12.1
    kube-controller-manager:v1.12.1
    kube-scheduler:v1.12.1
    kube-proxy:v1.12.1
    pause:3.1
    etcd:3.2.24
    coredns:1.2.2
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
# 使用脚本拉取

该方案来源:https://zhuanlan.zhihu.com/p/46341911

使用kube init 安装master节点

kubeadm init # 初始化
kubeadm init phase preflight # 只做预检查
kubeadm init --ignore-preflight-errors # 跳过预检查进行初始化

注意:如果是在启动了kubelet之后再拉取的镜像,请重启kubelet。不然kubeadm会识别不到刚刚拉取的镜像

ps:最后还是挂梯子init完了,有个镜像的名字和要求的不一样,懒得改tag了

对于root用户,直接键入export KUBECONFIG=/etc/kubernetes/admin.conf后即可使用kubectl查看control plane的信息,对于其他用户,需要使用另外的步骤,这些步骤都会在安装完成后显示出来,我贴在下面

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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 10.0.2.15:6443 --token sddm7y.7eebnrzpl2koekx1 \
        --discovery-token-ca-cert-hash sha256:77ed4804b2c367c1f3eb0b3e7114fdbed2bc94748d26d04d14d22af67fbb7e7e

如果不执行这些步骤,会出现以下报错

The connection to the server localhost:8080 was refused - did you specify the right host or port?

还要注意的一点是,kubeadm默认的安装过程不包含网络插件(CNI)的初始化,这些需要另外的步骤了。

加入节点

在节点配置好环境后,将上面的kubeadm join输入到另一节点即可。

安装CNI网络插件

二进制形式部署安全高可用k8s集群

master高可用架构

  • master中的kube-apiserver、kube-controller-manager、kube-scheduler至少以三个节点的多实例方式部署
  • master启用基于CA认证的HTTPS安全机制
  • etcd以至少三个节点的集群模式部署
  • etcd启用CA认证的HTTPS安全机制
  • master启用RBAC授权模式

在三个(或多个)master节点前,通过一个负载均衡器提供对客户端唯一访问入口地址。

CA根证书

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=网址" -days 36500 -out ca.crt
  • -subj: “/CN”的值为master主机名或IP地址
  • -days:设置证书的有效期
  • 将生成的ca.keyca.crt保存至/etc/kubernetes/pki目录下

看到这里发现后面的看不太懂了,先跳一跳