简介:因工作要求所以学习了一下kubernetes相关知识,在这里和大家分享一下。文章中所有步骤都是在root权限下执行的,如果文中有错误的地方还望看官交流指正,此文档仅用作参考,谢谢。
准备:
准备3台Cent OS7 虚拟机:
1.sh-vm3:172.17.1.43 port 4322 ; sh-vm4: 172.17.1.44 port 4422 ; sh-vm5: 172.17.1.45 port 4522
2.不需要ssh的同学忽略此步骤.
ssh -p 4322 root@218.255.12.218 ssh -p 4422 root@218.255.12.218 ssh -p 4522 root@218.255.12.218 开启终端 分别连接三台VM.
到这里我么的准备工作就完成了,下面让我们开始k8s的部署吧。
Master:
1.我们把sh-vm3:172.17.1.43 port 4322 作为集群的Master. sh-vm4和sh-vm5作为node.
2.在/etc/yum.repos.d/ 目录下新建docker.repo文件:vim /etc/yum.repos.d/docker.repo (如果没有安装vim 执行 yum install vim). 在文件内填入内容
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
3.安装docker: yum install docker-engine-1.12.6 ,执行 :
a. systemctl enable docker.service
b. systemctl daemon-reload
c. systemctl start docker
4.安装最新的kubectl:
a. curl -LOhttps://storage.googleapis.com/kubernetes-release/release/$(curl -shttps://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
b. chmod +x ./kubectl (修改权限)
c. mv ./kubectl /usr/local/bin/kubectl (移动文件位置)
5.安装kubeadm和kubelet
a. 在 /etc/yum.repos.d/ 目录下新建 kubernetes.repo文件: vim /etc/yum.repos.d/docker.repo 写入内容:
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
b. 禁用selinux,执行: setenforce 0
c. 安装kubeadm和kubelet , 执行: yum install -y kubeadm kubelet (注意:如果在这里出现错误,执行:vim /etc/yum.repos.d/docker.repo ; 将 gpgkey 的第一个链接https://packages.cloud.google.com/yum/doc/yum-key.gpg删除)
6.执行 vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ; 将systemd更改为cgroupfs 并且在 "--allow-privileged=true"后添加 ''--fail-swap-on=false" ,结果如下图
7执行 systemctl daemon-reload ; systemctl enable kubelet && systemctl start kubelet
8.创建集群,执行:kubeadm init --pod-network-cidr=10.244.0.0/16 ; (如果有提示 you can skip pre-flight ...那么在命令后面添加 --skip-preflight-checks 参数即可)这时候你可以看到如下内容:
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run (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
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join --token b5866f.ce6a5b3c7dbf849a 172.17.1.43:6443 --discovery-token-ca-cert-hash sha256:2ee4d26c40d529ca3c5ea715cb8ef5e5fc81bd5f7430dfe8cdf187e050e277c1
按照提示一步步执行即可
9.通过执行以下命令设置pod网络:
a. kubectl apply - f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
b. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
c. 现在master准备接受连接,执行步骤#8返回的kubeadm join命令,检查节点是否加入了网络,执行kubectl get node
10.等待node安装#2执行完,将master证书通过scp拷贝到node(有多台则执行多次):
a. scp -P 4422 /etc/kubernetes/pki/ca.keyroot@172.17.1.44:/etc/kubernetes/pki/1.key
b. scp -P 4422 /etc/kubernetes/pki/ca.crtroot@172.17.1.44:/etc/kubernetes/pki/1.crt
node将使用master上的证书生成新的证书
11.拷贝bootstrap-kubelet.conf 和~/.kube/config到node:
a. scp -P 4422 /etc/kubernetes/bootstrap-kubelet.confroot@172.17.1.44:/etc/kubernetes/
b. scp -P 4422 ~/.kube/configroot@172.17.1.44:~/.kube/
node安装:
1.重复Master安装步骤的2-6,完成之后执行#2
2.在/etc/kubernetes/ 目录下面新建pki 文件夹,用来存储秘钥,新建~/.kube/ 存放config文件:
mkdir /etc/kubernetes/pki/ ; mkdir ~/.kube/ 等待Master #10 #11执行完毕进行下一步
3.安装证书生成工具:
a. yum install httpd
b. systemctl enable httpd.service
c. yum install mod_ssl
4.生成证书(进入/pki文件目录):
a. openssl genrsa -out ca.key 2048
b. openssl req -new -key ca.key -subj "/CN=172.17.1.44" -out ca.csr ("/CN=ip"填入node的IP地址)
c. openssl x509 -req -in ca.csr -CA 1.crt -CAkey 1.key -CAcreateserial -out ca.crt -days 3650
5.启动kubectl服务:
a. systemctl enable kubelet && systemctl start kubelet
b. 执行Master#8 kubeadm join --token b5866f.ce6a5b3c7dbf849a 172.17.1.43:6443 --discovery-token-ca-cert-hash sha256:2ee4d26c40d529ca3c5ea715cb8ef5e5fc81bd5f7430dfe8cdf187e050e277c1 (如果有提示 you can skip pre-flight ...那么在命令后面添加 --skip-preflight-checks 参数即可)
7.到这里我们的node节点就部署好了,执行 kubectl get nodes 就可以看到集群的状态啦。
题外话:初次使用简书,排版不好还请谅解。如果有疑问的话可以留言,我会及时回复。