Kubernetes部署记录
环境
- 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