预计使用三个节点来完成k8s的初次体验工作。结点规划如下表所示。
IP | 节点角色 | 工作职责 |
---|---|---|
192.168.217.129 | master | 对外暴露API,对内提供工作流的调度和配置 |
192.168.217.130 | node1 | 承载着k8s运行的实际任务 |
192.168.217.131 | node2 | 同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 -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
所有节点都要配仓库
# 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
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;
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之后,意味着,可能需要配置默认路由。
尚有两个问题没有解决。