规划

预计使用三个节点来完成k8s的初次体验工作。结点规划如下表所示。

IP节点角色工作职责
192.168.217.129master对外暴露API,对内提供工作流的调度和配置
192.168.217.130node1承载着k8s运行的实际任务
192.168.217.131node2同node1相同

准备工作

主机名称解析

(在/etc/hosts文件编辑相关信息即可)

# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
master 192.168.217.129
node1  192.168.217.130
node2  192.168.217.131
# master,node1,node2等节点的ip应按照自己的实际情况来填写。

将上述配置文件拷贝到集群中的所有节点,包括master节点和node节点。

时间同步

(使用chrony服务实现)
各个节点的操作如下:

yum -y install chrony 

vim /etc/chrony.conf

~~~
server master
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
~~~~
#注释掉原有的server内容,把原有的时钟同步服务设置为master结点上的时钟同步。

关闭所有节点的iptables和firewalld以及selinux

iptables -F
systemctl stop firewalld
systemctl disable firewalld

内核配置

# 开启路由转发功能以及iptables的过滤策略。

cat <<EOF >  /etc/sysctl.d/k8s.conf
#开启iptables中ipv6的过滤规则
net.bridge.bridge-nf-call-ip6tables = 1
#开启ipv4的过滤规则
net.bridge.bridge-nf-call-iptables = 1
#开启服务器的路由转发功能
net.ipv4.ip_forward = 1
EOF

# 执行命令使修改生效。
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

配置yum仓库

所有节点都要配仓库

配置docker仓库

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager --disable docker-ce-edge
yum-config-manager --disable docker-ce-test

# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# Step 4: 开启Docker服务
sudo service docker start

# Step 5: 更改cgroup driver为systemd,并且为docker添加镜像加速。
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["****此处替换为自己的镜像加速地址****"]
}
EOF


systemctl daemon-reload
systemctl restart kubelet

配置k8s仓库

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
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
EOF
setenforce 0

安装相关组件

各个结点上都安装相关组件

#查看所有的kublet版本,选择适合自己的版本。
yum list kubelet --showduplicates | sort -r
#安装相关版本的组件
yum -y install kubeadm-1.13.0-0 kubelet-1.13.0-0 kubectl-1.13.0-0  kubernetes-cni-0.6.0-0 
#所有服务都设置为开机自启动
systemctl enable kubelet

上面的步骤有个坑,就是如果不指定kubernetes-cni的版本的话,默认会用更高的版本,然后就会导致yum安装失败,存在有依赖关系

拉取镜像

某些镜像是在google的网站上才能下载的,大多数时候我们访问不到,鉴于此,需要提前把镜像下载下来。
下面是一个通用的镜像下载脚本。


cat ./pull.sh
for i in `kubeadm config images list`; do   
	imageName=${i#k8s.gcr.io/}  
	docker pull registry.aliyuncs.com/google_containers/$imageName  	
	docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName  
	docker rmi registry.aliyuncs.com/google_containers/$imageName
done;

结点的初始化与集群的横向扩展

初始化master节点

kubeadm init  --kubernetes-version=v1.12.1  --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.217.129
#--kubernetes-version指明要下载的镜像版本
#--pod-network-cidr 指明网络的子网掩码,此处使用flannel模型的子网掩码
#--apiserver-advertise-address 指明与master结点绑定的ip

保存初始化后的那段话,将来新加入结点或者做别的操作的时候,可能会用到相关内容。

取消污点

kubectl taint nodes --all node-role.kubernetes.io/master-

配置命令补全功能

echo "source <(kubectl completion bash)" >> ~/.bashrc

配置flannel网络功能

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 下载flannel的yaml文件
kubectl apply -f  kube-flannel.yml
# 执行这个文件生成flannel的pods

安装dashboard

#Create a new ServiceAccount
kubectl create serviceaccount k8sadmin -n kube-system

#Create a ClusterRoleBinding with Cluster Admin Privileges
kubectl create clusterrolebinding k8sadmin --clusterrole=cluster-admin --serviceaccount=kube-system:k8sadmin

#Get the token
kubectl get secret -n kube-system | grep k8sadmin | cut -d " " -f1 | xargs -n 1 | xargs kubectl get secret  -o 'jsonpath={.data.token}' -n kube-system | base64 --decode

# 安装dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

这个token可以用来后面登陆使用。

添加一个新的节点到集群

执行加入节点的命令,这条命令来自于,执行kubeadm输出之后的内容。

kubeadm join 192.168.217.129:6443 --token vtqzkt.j0u1chomafn1offd --discovery-token-ca-cert-hash sha256:c25549dc8457677752b8d1b0547acfa8be742cbd5734802b6d2e3e9a6e7e1b73

采坑记录

1.指定版本之后,需要指明CNI的版本

 yum -y install kubeadm-1.13.0-0 kubelet-1.13.0-0 kubectl-1.13.0-0  kubernetes-cni-0.6.0-0 

2.出现failed 访问10.96.0.1之后,意味着,可能需要配置默认路由。

小结

尚有两个问题没有解决。

  • 1.目前的集群中使用的是iptables进行负载均衡,实际上可以使用性能更好的ipvs,有待后面研究。
  • 2.集群中现在的网络是flannel,后面考虑如何平稳的过渡为calico网络模型。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐