k8s
Kubernetes: 一个部署镜像的平台。可以用来操作多台机器调度部署镜像,大大地降低了运维成本。
使用 k8s 管理集群。集群就会存在 Master 节点和 Node 节点。通常 Node 节点才是我们业务服务器。
#
安装#
前期准备安装些必备组件。 vim 是 Linux 下的一个文件编辑器; wget 可以用作文件下载使用; ntpdate 则是可以用来同步时区:
yum install vim wget ntpdate -y
k8s 会创建防火墙规则,导致防火墙规则重复,所以这里先关闭防火墙:
systemctl stop firewalld & systemctl disable firewalld
关闭 防火墙, swap, selinux 原因:https://www.zhihu.com/question/374752553
关闭 swap:
#临时关闭swapoff -a# 永久关闭vi /etc/fstab
注释:/dev/mapper/centos-swap swap ...
关闭 Selinux:
# 暂时关闭 selinuxsetenforce 0
# 永久关闭vi /etc/sysconfig/selinux# 修改以下参数,设置为disableSELINUX=disabled
使用 ntpdate 同步时间:
# 统一时区,为上海时区ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimebash -c "echo 'Asia/Shanghai' > /etc/timezone"
# 统一使用阿里服务器进行时间更新ntpdate ntp1.aliyun.com
#
安装 Docker重启 docker 并且查看 docker 状态:
systemctl restart docker && systemctl status docker
#
安装 Kubernetes 组件将安装源更换为为国内的阿里云源:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
yum install -y kubelet kubeadm kubectl# 启动kubeletsystemctl enable kubelet && systemctl start kubelet
kubelet 是 Kubernetes 中的核心组件。它会运行在集群的所有节点上,并负责创建启动服务容器 kubectl 则是Kubernetes的命令行工具。可以用来管理,删除,创建资源 kubeadm 则是用来初始化集群,子节点加入的工具。
重启:
service kubelet restart
#
Master 节点安装使用 hostnamectl
设置主机名称为 master
:
hostnamectl 是 CentOS7 新命令
hostnamectl set-hostname master
修改 /etc/hosts
: master
vim /etc/hosts# 本机ip master192.168.79.5 master
#
配置 Kubernetes 初始化文件kubeadm config print init-defaults > init-kubeadm.conf
vim init-kubeadm.conf
, 做以下修改
- 更换 Kubernetes 镜像仓库为阿里云镜像仓库,加速组件拉取
- 替换 ip 为自己主机 ip
- 配置 pod 网络为 flannel 网段
# imageRepository: k8s.gcr.io 更换k8s镜像仓库imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers# localAPIEndpointc,advertiseAddress为master-ip ,port默认不修改localAPIEndpoint: advertiseAddress: 192.168.56.101 # 此处为master的IP bindPort: 6443# 配置子网络networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16 # 添加这个
使用 kubeadm 拉取我们的默认组件镜像:
kubeadm config images pull --config init-kubeadm.conf
#
初始化 Kuberneteskubeadm init --config init-kubeadm.conf
如果失败了,可以 rm -rf $HOME/.kube/config && rm -rf /etc/kubernetes/manifests/
, kubeadm reset
重置,然后再执行。
成功后的图片:
保存下成功信息,后面会用到:
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 192.168.79.6:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:087679146a3330b200e1509ddc095d1bda0fd02feab8524ee87ec896932f559b
执行命令: 配置 kubectl 工具
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
#
遇到问题: kubelet.service fail to start upvim /etc/docker/daemon.json
{ "exec-opts": ["native.cgroupdriver=systemd"]}
sudo systemctl restart docker
然后重新 init
#
安装 FlannelFlannel: 通过创建一个虚拟网络,让不同节点下的服务有着全局唯一的IP地址,且服务之前可以互相访问和连接。
下载配置文件:
wget http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
从配置文件中找到 flannel 镜像(initContainers),使用 docker 拉取:
docker pull quay.io/coreos/flannel:v0.14.0
使用 kubectl apply 命令加载服务:
kubectl apply -f kube-flannel.yml
查看启动情况:
kubectl get nodes
#
Node节点配置在 Node 节点机子上执行一遍:上面的前期准备,安装 Docker, 安装 Kubernetes 组件
设置 hostname:
hostnamectl set-hostname node1
#
拷贝 Master 节点配置文件在 master 机器上发送配置文件到 node 机器
scp $HOME/.kube/config root@node的ip:~/
在 Node 机器上, 归档配置文件:
mkdir -p $HOME/.kubesudo mv $HOME/config $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
#
加入 Master 节点下面命令是,master 节点运行成功后获取的:
kubeadm join 192.168.79.6:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:6efa044044a224f229561ff898e9f0773fa67e337ceb5583ef7636d94628eff2
也可以重新在 master 机器上获取:
kubeadm token create --print-join-command
#
问题 /etc/kubernetes/pki/ca.crt already exists先 kubeadm reset
#
安装 FlannelNode 节点安装 Flannel 方式和 master 节点一样。
#
问题- cgroupDriver 问题
查看 docker cgroupDriver: 默认是 cgroupfs,需要修改成 systemd 和 k8s 一样。
docker info |grep -i cgroup
k8s地址: /var/lib/kubelet/config.yaml
, 默认是 systemd
#
ingress对请求做路径分流。
#
命令查看 Pod 信息
kubectl get pod
查看 Service 列表:
kubectl get svc