Kubernetes部署记录

2019-05-14 by 没有评论

环境

  • master: 192.168.0.84
  • node1: 192.168.0.46

OS: CentOS7

备注:本文档在root权限下操作,部分命令请自行添加sudo

以下内容在master和node节点都需要执行一遍

添加aliyun yum repo

(非必须,国内安装的centos一般会添加163源)

wget https://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo /etc/yum.repos.d/

修改hosts,主要是添加k8s.master的ip映射

192.168.0.84 k8s.master

安装docker tools

安装必要环境

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

安装docker-ce

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl enable docker
systemctl start docker

修改docker镜像加速等参数

首先进入阿里云控制台,进入容器镜像服务,找到下面的镜像加速器,如果没有就创建一下,会显示一个例如https://7tl4oztp.mirror.aliyuncs.com的地址

vi /etc/docker/daemon.json
(如果目录不存在请自行创建)

{
  "registry-mirrors":["https://7tl4oztp.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts":{"max-size":"100m"},
  "storage-driver": "overlay2"
}

这里同时还指定了cgroupdriver为systemd,避免k8s cgroupdriver冲突问题

修改完毕后刷新docker服务

systemctl daemon-reload
systemctl restart docker

安装k8s

配置yum repo

vi /etc/yum.repos.d/kubernetes.repo

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

安装

yum install -y kubelet kubeadm kubectl ipsvadm
systemctl enable kubelet

注意,如果是安装node节点,务必保证版本和master一致

配置k8s环境

  • 关闭swap

swapoff -a
永久关闭:
vi /etc/fstab
将有swap的行注释掉
– 开启转发

iptables -P FORWARD ACCEPT
vi /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0

sysctl –system

预先下载镜像

可以调用
kubeadm config images list
得到所需的镜像和版本号

k8s.gcr.io/kube-apiserver:v1.17.3
k8s.gcr.io/kube-controller-manager:v1.17.3
k8s.gcr.io/kube-scheduler:v1.17.3
k8s.gcr.io/kube-proxy:v1.17.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

由于国内网络原因,无法直接下载以上镜像,所以可以通过代理源自行下载
目前可用的代理源包括:
– registry.cn-hangzhou.aliyuncs.com/google_containers/*

其中coredns可以直接调用docker pull coredns/coredns:1.6.5进行下载,其他都可以把前面的k8s.gcr.io替换为以上前缀pull down

pull完成后使用docker tag指令将前缀换回k8s.gcr.io即可

配置kubelet参数

这里涉及到前面parse image的版本号,保持同步
vi /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --pod-infra-container-image=k8s.gcr.io/pause:3.1"

至此公共部分完毕

master

初始化kubeadm

kubeadm init --kubernetes-version=v1.17.3 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=xx.xx.xx.xx

这里kubernetes-version可以直接根据前面images的version进行判断
pod-network-cidr是pods的网段,如果使用官方flannel配置网络建议使用10.224.0.0/16
apiserver-advertise-address默认是0.0.0.0,如果想固定一个ip方位或者公网访问可以配置成一个固定ip,通常情况下省略

安装完毕后界面会有添加nodes节点指导和配置kubectl指导

kubectl配置

cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown user:user $HOME/.kube/config

简单来说就是把admin.conf复制到对应用户根目录.kube/config文件,并修改归属关系,root用户就是放到/root/.kube/config了

配置k8s网络

笔者这里遇到了coredns无法启动的问题,进而导致kubectl get nodes一直是NotReady,这里提供一个命令

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

此外官方指导还要求配置flannel,作用不明,可以配一下

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

node节点

执行前面的k8s环境配置(理论上只需要kube-proxy, coredns和pause这3个镜像)
建议join前先修改主机名

前面master节点kubeadm init完毕会提供一个join命令
例如

kubeadm join 192.168.0.84:6443 --token xxxxx --discovery-token-ca-cert-hash sha256:xxxxx

如果未及时记录可以用以下命令生成(在master主机执行)

kubeadm token generate
kubeadm token create <generated-token> --print-join-command --ttl=0

里面的generated token替换为第一个命令的返回值

执行这个kubeadm join指令
同时和master一样把.kube/config文件配置完毕(从master主机复制)
此时可以查看
kubectl get nodes

安装kubernetes-dashboard

k8s dashboard是一个常用UI控制台组件,目前已更新到2.0版本(1.x版本不再支持k8s 1.6以上版本,虽然能安装但是无法正常访问deployments)

https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml

下载当前最新版本dashboard yaml(可到github查询最新版本链接)

新版dashboard权限很低,所以需要手动修改一下yaml文件

找到kind: ClusterRoleBinding和RoleBinding
分别在roleRef内把name从kubernetes-dashboard改成cluster-admin

笔者经验来看如果dashboard没有部署到master节点会出现无法连接10.96.0.1:443的故障。。。所以增加一个nodeSelector

找到Deployment中的nodeSelector部分
添加kubernetes.io/hostname: mastername

默认token登录有效期很短,可添加环境变量,找到kubernetesui/dashboard image,在下面的args内添加参数:

--token-ttl=43200(12小时)

这里master host name可以执行kubectl get nodes –show-labels查看

如果无法启动,需要暂时解除master节点的限制:

kubectl taint node k8s-master node-role.kubernetes.io/master-

若需要恢复,执行

kubectl taint node k8s-master node-role.kubernetes.io/master="":NoSchedule

然后执行

kubectl apply -f recommended.yaml

注:2.0版本dashboard新增了一个kubernetes-dashboard的namespace,如果出现问题直接kubectl delete namespace kubernetes-dashboard即可

然后就是查询登录token了

kubectl get secrets -n kubernetes-dashboard

查询到kubernetes-dashboard-token-xxxxx的条目后describe一下就能看到token了

kubectl describe secret kubernetes-dashboard-token-xxxx -n kubernetes-dashboard

存入私有registry访问密码

kubectl create secret docker-registry secretname --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

重置k8s

kubeadm reset
可以清空当前主机所有docker container和k8s配置(网络配置需要手动执行,当前指令执行完毕会有提示)

如果重置的是node节点,还需要执行

kubectl drain <nodename> --ignore-daemonsets --delete-local-data
kubectl delete node <nodename>

移除node

标签:,