- 环境初始化
- 安装chronyd服务
- 启动chronyd服务
- 设置chronyd服务开机自启
- 使用date查看当前时间
- 上下两种同步方式任选一种,如果需要安装ceph建议用chronyd
- 编辑 /etc/selinux/config 文件,修改SELINUX的值为disabled,修改完重启linux。该处不用重启,可以在初始化环境结束后在重启
- 也可以直接使用命令
- 安装docker
- 安装kubernetes组件
- 准备集群镜像
- 集群初始化(只在master节点上操作)
- 安装网络插件,k8s支持多种网络插件,比如flannel、calico、canal,任选一种,本次选择flannel,建议选择calico,
- 根据插件选择执行yaml即可
- kubernetes中kubectl命令自动补全
环境初始化
检测操作系统版本,该安装方式要求centos版本在7.5以上
cat /etc/redhat-release
修改主机名(所有节点设置对应主机名)
hostnamectl set-hostname [hostname]
主机名解析,方便集群之间节点调用,企业推荐使用内部dns
vim /etc/hosts 192.168.3.180 k8s-master 192.168.3.181 k8s-node1 192.168.3.183 k8s-node2
时间同步,kubenetes要求集群中的时间节点必须保持一致,这里采用chronyd服务从网路同步时间,企业中建议配置内部时间同步服务器 ```shell
安装chronyd服务
yum -y install chrony
启动chronyd服务
systemctl start chronyd
设置chronyd服务开机自启
systemctl enable chronyd
使用date查看当前时间
date
上下两种同步方式任选一种,如果需要安装ceph建议用chronyd
yum install ntpdate -y ntpdate time.windows.com
5. 禁用iptables和firewalld服务,kubenetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟他们混淆,直接关闭系统规则
```shell
#1.关闭firewalld服务
systemctl stop firewalld && systemctl disable firewalld
#2.关闭iptables服务
#下载iptables
yum install iptables-services -y
systemctl stop iptables && systemctl disable iptables
- 禁用selinux,selinux是linux的安全服务,不关闭容易产生各种问题
```shell
编辑 /etc/selinux/config 文件,修改SELINUX的值为disabled,修改完重启linux。该处不用重启,可以在初始化环境结束后在重启
vim /etc/selinux/config SELINUX=disabled
也可以直接使用命令
sed -i ‘s/enforcing/disabled/‘ /etc/selinux/config
7. 禁用swap分区,swap分区是指虚拟内存,当物理内存使用完后,将磁盘空间虚拟成内存来使用,swap会对系统的性能产生负面影响,因此kubenetes所有节点都需要禁用swap,如果因为其他原因不能关闭,需要在集群安装过程中明确的通过参数进行配置说明(百度)。
```shell
#编辑分区文件/etc/fstab 注释掉swap分区一行
#/dev/mapper/centos-swap swap defaults 0 0
---------------------------
#也可以直接使用命令
---------------------------
sed -ri 's/.*swap.*/#&/' /etc/fstab
修改linux内核参数,添加网桥过滤和地址转发功能,
#编辑 /etc/sysctl.d/kubernetes.conf文件,添加以下配置 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0
#重新加载配置 sysctl -p #加载网桥过滤模块 modprobe br_netfilter #查看网桥过滤模块是否开启成功 lsmod |grep br_netfilter
配置ipvs功能,在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的,两者比较的话,ipvs性能明显要高一些,但是如果要使用它,需要手动载入模块
#1.安装ipset和ipvsadm yum install ipset ipvsadm -y #2.添加需要加载的模块写入脚本 cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF #3.为脚本添加执行权限 chmod +x /etc/sysconfig/modules/ipvs.modules #4 执行脚本文件 /bin/bash /etc/sysconfig/modules/ipvs.modules #5 查看对应模块是否加载成功 lsmod | grep -e ip_vs -e nf_conntrack_ipv4
重启三台服务器
reboot
安装docker
安装yum-utils
yum install -y yum-utils
配置docker国内镜像源和yum国内镜像源 ```shell wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all
3. 安装docker
```shell
yum -y install docker-ce-18.06.3.ce-3.el7
添加配置文件,docker在默认清空下使用的cgroup driver为cgroups,而kubernetes推荐使用systemd来代替cgroups
mkdir /etc/docker cat <<EOF> /etc/docker/daemon.json { "exec-opts":["native.cgroupdriver=systemd"], "registry-mirrors": ["https://w5hfxsgn.mirror.aliyuncs.com"] } EOF
设置启动和开机自启
systemctl daemon-reload systemctl start docker systemctl enable docker #查看docker版本信息 docker version
安装kubernetes组件
由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内镜像源
#编辑/etc/yum.repos.d/kubernetes.repo,添加以下配置 [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enable=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
安装kubeadm、kubelete、kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
配置kubelet的cgroup
#编辑/etc/sysconfig/kubelet,删除原有数据。添加下面配置 KUBELET_CGROUP_ARGS="--cgroup-driver=system" KUBE_PROXY_MODE="ipvs"
设置kubelet开机自启
systemctl enable kubelet
准备集群镜像
通过命令查看需要的镜像
kubeadm config images list
k8s镜像仓库国内无法访问。阿里云有其镜像但是tag不通,我们下载阿里云的镜像,然后更换tag并删除原镜像。
#定义镜像 images=( kube-apiserver:v1.18.20 kube-controller-manager:v1.18.20 kube-scheduler:v1.18.20 kube-proxy:v1.18.20 pause:3.2 etcd:3.4.3-0 coredns:1.6.7 ) #循环下载镜像 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.grc.io/$imageName docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done
集群初始化(只在master节点上操作)
初始化集群,apiserver0advertise-address后的ip地址改为masterip地址
kubeadm init \ --apiserver-advertise-address=192.168.3.180 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
出现该图显示样式表示初始化成功,切记,该处别清屏或者重启。
- 根据初始化信息提示,还需要以下操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 然后在node节点执行以下命令,该命令也来自初始化成功后信息
kubeadm join 192.168.3.180:6443 --token lpkvp0.vywiwmfk80xpgwvi \ --discovery-token-ca-cert-hash sha256:b6f4a21d858681e971fe0cfa25365cd35d874d5f87369cc57a3f14156cad3bac
默认的token有效期为24小时,当过期之后,该token就不能用了,这时可以使用如下的命令创建token:
kubeadm token create --print-join-command
生成永不过期token
kubeadm token create --ttl 0 --print-join-command
执行下列命令可以看到节点信息
kubectl get nodes
安装网络插件,k8s支持多种网络插件,比如flannel、calico、canal,任选一种,本次选择flannel,建议选择calico,
该操作同样只在master节点操作,下载kube-flannel.yml文件或者calico.yaml。
- 将文件上传至master节点下,在yml所在文件夹执行下列指令。 ```bash kubectl apply -f kube-flannel.yml
根据插件选择执行yaml即可
kubectl apply -f calico.yaml
3. 以下为错误信息处理
1. 将操作节点上的/etc/kubernetes/admin.conf文件分发到所有节点的/etc/kubernetes目录下。编辑环境变量文件。执行操作。
```shell
#编辑环境变量文件
vim ~/.bash_profile
#在末尾添加如下信息
export KUBECONFIG=/etc/kubernetes/admin.conf
#保存后,让配置生效
source ~/.bash_profile
- kubectl get nodes 使用该命令会发现所有节点包括主节点依旧是notready。这时候就是网络插件出现问题。
使用命令查看pod状态
#查看kube-system命名空间下所有pod kubectl get pod -n kube-system #找到status为Init:ImagePullBackOff #使用命令再看其运行状态 kubectl describe pod -n kube-system kube-flannel-ds-gl766 #可以看到flannel镜像没有拉取下来,国内没有该镜像,但是找到了替换镜像,注意tag,如果tag不对可以使用docker search搜索可替换镜像,看描述。下面的插件安装工作在所有节点操作。所有节点均需要操作! docker pull xwjh/flannel:v0.14.0 #使用tag替换镜像 docker tag xwjh/flannel:v0.14.0 quay-mirror.qiniu.com/coreos/flannel:v0.14.0 #删除原有镜像 docker rmi xwjh/flannel:v0.14.0
-
网络部署测试
部署nginx。
kubectl create deployment nginx --image=nginx:1.14-alpine
暴露80端口
kubectl expose deployment nginx --port=80 --type=NodePort
查看服务状态
kubectl get pods,svc
访问nginx服务,任一节点ip:端口,例如上放图片描述,192.168.3.180:30989
- kubectl cluster-info 可以获取kubectl信息
获取kebenetes dashboard 令牌
#创建一个用户
kubectl create serviceaccount dashboard-admin -n kube-system
绑定用户为集群管理用户
kubectl create clusterrolebinding dashboard-cluster-admin —clusterrole=cluster-admin —serviceaccount=kube-system:dashboard-admin
#获取令牌名
kubectl getsecret -n kube-system |grep admin
#获取token
kubectl describe secret -n kube-system <上一步获取的令牌名>
kubernetes中kubectl命令自动补全
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo “source <(kubectl completion bash)” >> ~/.bashrc
vim /root/.bashrc
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)