二维码

k8s安装

1697 人阅读 | 时间:2019年10月09日 15:46

最近研究了一下目前比较火的Kubernetes(k8s), 重点关注了下它最新的1.9版本这个版本较老的1.1版本的确简化了很多配置它利用kubeadm这个工具对全局进行批量化部署减轻了我们初学者起步的学习成本.

目前主流的安装k8s系统平台有Centos7ubuntu, 这里笔者因为对centos有常年的运维开发经验所以就选择前者.

另外官方已经在近期将kubernetes1.1版本的centos7配置从官网移除所以建议大家使用1.9版本完成所有的安装部署.

本文档推荐给大家的原因是因为目前网上基本上没有一个较为完整和正确率较高的k8s的安装文档笔者因此整合了网上零散的k8s资源给大家提供一个较为靠谱的离线安装k8s 1.9版本的安装范例.

什么是Kubernates?

Kubernetes 用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。它旨在提供跨主机集群的自动部署、扩展以及运行应用程序容器的平台。它支持一系列容器工具目前主流会使用Docker作为他的主流配置容器.

为什么要使用离线安装呢?

因为kubeadm默认要从google仓库下载镜像,但目前国内无法访问google仓库,所以这里从网上找到1.9的离线安装包,大家只需要将离线包的镜像导入到相应节点即可.

Let's start...

安装环境

Local Desktop: MacOS

Virtual Machine: Virtual Box

Virtual System: CentOS 7.4

Kubernetes: Kubernetes1.9

Docker:17.03.2-ce

kube-master 10.110.16.10

kube-node-1 10.110.16.11

系统环境配置

(Master Node都需要配置)

1.下载离线安装包

链接:https://pan.baidu.com/s/1c2O1gIW密码: 9s92

下载到本地后上传到虚拟机root根目录

# tar jxvfk8s_images.tar.bz2

2. 安装依赖

Tip: 这里需要更新CentOS7内核到最新版本才能打开centos的路由功能以供k8s使用更新完毕需要重启系统使kernel新版本生效

# yum install policycoreutils-python libtool-ltdllibseccomp device-mapper-libs kernel ntpdate

# reboot

3.绑定本地host

# echo "10.110.16.10 kube-master" >> /etc/hosts

# echo "10.110.16.11 kube-node-1" >> /etc/hosts

4.添加kube-masterkube-node-1的秘认证(Master需要配置)

ssh-keygen

ssh-copy-id kube-node-1

5.关闭SELINUXfirewall

# vi /etc/sysconfig/selinux

...

SELINUX=disabled

...

setenforce 0

systemctl stop firewalld &systemctl disable firewalld

6.路由配置

# modprobe br_netfilter

# echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf

# echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf

sysctl -p

7.关闭Swap分区

大家在安装CentOS7时如果配置了swap分区这里由于k8s禁止系统开启此功能需要提前进行关闭没有配置swap请无视.

查看swap分区目录

swapon -s

Filename                                Type            Size    Used    Priority

/swapfile                               file    1996796 1214364 -1

关闭swap分区

swapoff /swapfile

注释掉swap分区禁止开机启动swap

# vi /etc/fstab

...

#/dev/mapper/centos-swap swap                    swap    defaults        0 0

...

8.开启系统时间同步

# systemctl enable ntpdate && systemctl start ntpdate

. Docker配置

(Master Node都需要配置)

1.安装docker-ce17.03

# rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
# rpm -ivh docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

2.修改Docker使用阿里的镜像

Tip: 访问https://cr.console.aliyun.com/#/accelerator注册账号在镜像加速器里获取个人的仓库地址并填入如下配置文件

# mkdir /etc/docker

# vi /etc/docker/daemon.json

...

{

  "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]

}

...

3.重启docker并设置开机启动
systemctl daemon-reload
systemctl restart docker
systemctl enable docker

4.本地载入我们的离线镜像

# cd /root

# mv /root/k8s_images/docker_images/etcd-amd64\:v3.1.10.tar /root/k8s_images/docker_images/etcd-amd64_v3.1.10.tar

# vi load_image.sh

docker load < /root/k8s_images/docker_images/etcd-amd64_v3.1.10.tar

docker load </root/k8s_images/docker_images/flannel_v0.9.1-amd64.tar

docker load </root/k8s_images/docker_images/k8s-dns-dnsmasq-nanny-amd64_v1.14.7.tar

docker load </root/k8s_images/docker_images/k8s-dns-kube-dns-amd64_1.14.7.tar

docker load </root/k8s_images/docker_images/k8s-dns-sidecar-amd64_1.14.7.tar

docker load </root/k8s_images/docker_images/kube-apiserver-amd64_v1.9.0.tar

docker load </root/k8s_images/docker_images/kube-controller-manager-amd64_v1.9.0.tar

docker load </root/k8s_images/docker_images/kube-scheduler-amd64_v1.9.0.tar

docker load < /root/k8s_images/docker_images/kube-proxy-amd64_v1.9.0.tar

docker load </root/k8s_images/docker_images/pause-amd64_3.0.tar

docker load < /root/k8s_images/kubernetes-dashboard_v1.8.1.tar

sh load_image.sh

.Kubernetes配置

1.安装kubeletkubeadmkubectl(Master Node都需要配置)

# cd k8s_images
# rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
# rpm -ivhkubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpmkubectl-1.9.0-0.x86_64.rpm
# rpm -ivh kubeadm-1.9.0-0.x86_64.rpm

2.重启kubelet并设置开机启动(Master Node都需要配置)

systemctl enable kubelet && sudosystemctl start kubelet

3.修改docker配置文件中的Cgroup Driver参数与k8s一致(Master Node都需要配置)

# docker info |grep "Cgroup Driver"
如果"CgroupDriver"value"cgroupfs", 将其值写入kubeadm配置文件
# vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

...

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver="cgroupfs"

...

systemctl daemon-reload && systemctl restart kubelet

4.Master初始化(Master 需要配置)

kubeadm reset

kubeadminit --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16

Tip: 这里的10.244.0.0/16与默认的配置文件网段一致如需调整请在后面的kube-flannel.yml文件做相应改变

如果一切没问题会output一个token返回命令

kubeadm join --token 288f34.481c8faa5636966f 10.110.16.10:6443 --discovery-token-ca-cert-hash sha256:8036fac3b76e1a0dd189edaa8f7d36f2b51429dd0c0cf7ea0d78e7972d611002

24小时后这个token会失效需要重新生成使用如下命令进行生成.

kubeadm token create

kubeadm join --token "Your token code" "Your master ip address":6443

如果在24小时内忘记了,可以用如下命令获取.

kubeadm token list

5.设置用户环境变量(Master 需要配置)

如果你使用的是root
# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
# source ~/.bash_profile

如果是非root用户

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudochown $(id -u):$(id -g) $HOME/.kube/config

测试kubectl版本

kubectl version

Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T21:07:38Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T20:55:30Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

6.使用flannel组件进行k8s网络配置(Master 需要配置)

# wgethttps://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

Tip: 这里的yml配置文件内的网段配置需与上面介绍的Master初始化的配置网段"--pod-network-cidr=10.244.0.0/16" 一致

kubectl create -f kube-flannel.yml

7.查看所有pod详细信息(Master 需要配置)

kubectl get pod --all-namespaces -o wide

kubectl describe pods

8.添加Node(Node 需要配置)

Master初始化输出中获取

kubeadm join --token 288f34.481c8faa5636966f 10.110.16.10:6443 --discovery-token-ca-cert-hashsha256:8036fac3b76e1e0dd189edaa8f7d36f1b51429dd0c0cf7ea0d78e7972d611002

Tip:这里作为可选因为笔者将Master加入Node调度中让其同时充当MasterNode的角色如果资源有限只有一台测试机的小伙伴这步可以略过.

9.Master加入Node schedual调度(Master 需要配置)

Tip: 默认Master不会加入Node调度这里使用如下命令开启这个限制.

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

如果我们有多个node需要手动去做调度从而不让我们的pod进入该node调度列表可以使用如下命令:

禁用该node调度

kubectl cordonkube-node-1

查看是否禁用

kubectl get node kube-node-1

NAME          STATUS                     ROLES     AGE       VERSION

kube-node-1   Ready,SchedulingDisabled   node    11d       v1.9.0

解禁该node调度

#kubectluncordonkube-node-1

查看是否解禁

kubectl get nodeskube-node-1

NAME          STATUS  ROLES     AGE       VERSION

kube-node-1   Ready   node    11d       v1.9.0

10.测试K8s cluster(Master 需要配置)

我们利用k8s创建一个apache的网站实例镜像为httpd并设置2个副本.

kubectl run httpd-app --image=httpd --replicas=2

kubectl get deployment

NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE

httpd-app   2         2         2            2           2h

kubectl get pods -o wide

NAME                         READY     STATUS    RESTARTS   AGE       IP            NODE

httpd-app-5fbccd7c6c-27nzv   1/1       Running   0          2h        10.244.0.13   kube-master

httpd-app-5fbccd7c6c-n9qs2   1/1       Running   0          2h        10.244.0.12   kube-master

11.测试网站实例(Master 需要配置)

#curl 10.244.0.13

<html><body><h1>It works!</h1></body></html>

#curl 10.244.0.12

<html><body><h1>It works!</h1></body></html>

12.安装kubernetes-dashboard(Master 需要配置)

Tip:默认kubernetes是没有图形管理界面我们这里通过添加一个dashboard容器去添加一个可管理的GUI界面

# cd/root/k8s_images

添加dashboard容器

#kubectl create -f kubernetes-dashboard.yaml

创建认证文件

#vi /etc/kubernetes/pki/basic_auth_file

#user,password,userid

admin,admin,2

配置dashboard basic认证

#vi /etc/kubernetes/manifests/kube-apiserver.yaml

添加一行:

- --basic_auth_file=/etc/kubernetes/pki/basic_auth_file

如下:

...

- --etcd-servers=http://127.0.0.1:2379

- --basic_auth_file=/etc/kubernetes/pki/basic_auth_file

image: gcr.io/google_containers/kube-apiserver-amd64:v1.9.0

...

更新认证配置

#kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml(可不执行待验证)

systemctl restart kubelet

admin账号加入cluster-adminrole, 获取k8s最高系统权限

#kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin

访问dashboard主页

https://10.110.16.10:32666

账号/密码: admin/admin

k8s安装

k8s安装

大功告成...

更多kubernetes组件介绍:

Kubernetes之Pod, Replicaset, Deployment, Label, Servicehttp://www.showerlee.com/archives/2246

Kubernetes之Persistent Volume(持久化卷)http://www.showerlee.com/archives/2280

Kubernetes之Secrets与Config Mapshttp://www.showerlee.com/archives/2308

Kubernetes之Helm包管理http://www.showerlee.com/archives/2455


©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×