K8S部署

前言:

具体步骤:

  • (一)系统环境初始化

(1)关闭防火墙、selinux:

systemctl stop firewalld && systemctl disable firewalld

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config  && setenforce 0

(2)设置主机名以及域名映射(hosts)

hostnamectl set-hostname master、node01、node02

/etc/hosts:

ip  master

Ip  node01

Ip  node02

(3)设计系统时区并同步服务器

确认时间同步:

yum install -y chrony

systemctl enable --now chronyd

chronyc sources && timedatectl

(4)关闭swap交换分区:

swapoff -a

sed -i 's/.*swap.*/#&/' /etc/fstab

备注:

Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。

修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。

(5)内核调整:kuber-proxy代理支持iptables和ipvs两种模式

方案一:使用ipvs模式需要在初始化集群前加载要求的ipvs模块并安装ipset工具。另外,针对Linux kernel 4.19以上的内核版本使用nf_conntrack 代替nf_conntrack_ipv4。

方案二:将桥接的IPv4流量传递到iptables的链:

$ cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

$ sysctl --system

  • (二)安装docker

$wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

$ yum -y install docker-ce-18.06.1.ce-3.el7

$ systemctl enable docker && systemctl start docker

$ docker --version

验证:Docker version 18.06.1-ce, build e68fc7a

可以再次验证(没必要):

docker run hello-world

  • (三)K8s环境初始化

(1)添加kubernetes YUM软件源

vi /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

备注:

这里的两个秘钥地址分别对应gpgcheck和repo_gpgcheck。这里其实repo_gpgcheck可以省略。第二个秘钥链接也是不可少的,不然会安装失败

yum clean all

yum -y makecache

(2)安装kubeadm,kubelet和kubectl:所有主机都需要操作,由于版本更新频繁,这里指定版本号部署

$ yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0

$ systemctl enable kubelet

备注一:

安装包说明:

kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具

kubeadm 用于初始化集群,启动集群的命令工具

kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

安装包说明二:

在部署kubernetes时,要求master node和worker node上的版本保持一致,否则会出现版本不匹配导致奇怪的问题出现。

备注二:

查看安装包提供的配置文件:

查看kubelet安装生成的文件:

rpm -ql kubelet

备注三:

启动服务后需要确保服务是否正常启动,如果没有正常启动,需要到/var/log/message查看日志

 

  • (四)部署master节点

 (1)初始化kubeadm

kubeadm init --apiserver-advertise-address=10.1.182.184 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

1)说明:当出现如下结果,表示初始化顺利

记录kubeadm join的输出,后面需要这个命令将各个节点加入集群中。

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.1.182.184:6443 --token jzwzd9.3913rfwhi86x6cmq \

    --discovery-token-ca-cert-hash sha256:b1301249df1fd1fdc71100e0cfd30bb23188316999b92dcde5f67aef1d36a289

2)参数说明:

选项非常多,不可能记得住,可以通过命令kubeadm init --help查看

--apiserver-advertise-address指定master的interface

--image-repository Kubenetes默认Registries地址是k8s.gcr.io,国内无法访问,

在1.13版本后可以增加–image-repository参数,将其指定为可访问的镜像地址,这里使用registry.aliyuncs.com/google_containers

--kubernetes-version指定的是k8s的版本,要求与kubeadm,kubelet和kubectl的版本一致

--service-cidr指定service 的IP 范围. (default "10.96.0.0/12")

pod-network-cidr来指定网络驱动的CIDR。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr有自己的要求,flannel设置为 10.244.0.0/16,calico设置为192.168.0.0/16

备注:pod的IP在flannel的网段内。

 

验证部署验证:查看部署的组件是否健康

此时节点的状态是notready

 

(2)配置 kubectl

kubectl 是管理 Kubernetes Cluster 的命令行工具, Master 初始化完成后需要做一些配置工作才能使用kubectl(比如tab自动补全功能),参考初始化结果给出的命令进行以下配置:

根据输出提示操作:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

备注:部署master节点成功

kubectl get node

  • (五)部署node节点:node节点加入集群

在“node节点”上分别执行如下操作:执行kubeadm的kubeadm join的输出

Kubeadm join 10.1.182.184:6443 --token jzwzd9.3913rfwhi86x6cmq --discovery-token-ca-cert-hash sha256:b1301249df1fd1fdc71100e0cfd30bb23188316999b92dcde5f67aef1d36a289

再通过master节点查看node,发现node节点已以成功加入集群,并且Status状态为Ready:

  • (六)在master节点安装网络插件

备注:此步骤可以和第四步一起操作

(1)安装Pod网络插件(CNI)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

(2)查看是否部署成功

kubectl get pods -n kube-system

 

(3)再次查看node,可以看到状态为ready

  • (七)测试Kubernetes集群

(1)在Kubernetes集群中创建一个pod,然后暴露端口,验证是否正常访问:

kubectl create deployment nginx --image=nginx

kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get pods,svc

(2)在浏览器访问测试

访问地址:http://NodeIP:Port 

Node是masterip地址

port是nginx的30328端口

  • (八)部署 Dashboard
  • (1)下载并修改yaml:

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

vi kubernetes-dashboard.yaml

 (2)部署dasbboard

kubectl apply -f kubernetes-dashboard.yaml

(3)在火狐浏览器访问(google受信任问题不能访问)地址: https://NodeIP:30001

 

(4)dashboard运行在pod资源中,所以dashboard所在的Pod要以serviceaccount类型的用户身份认证到k8s集群上去访问k8s的api service组件

1)创建serviceaccount,用户名为dashboard-admin:

kubectl create serviceaccount dashboard-admin -n kube-system

2)通过clusterrolebinding绑定到内置的cluster-admin角色上:

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

3)查看登录的令牌:kubectl describe secrets -n kube-system dashboard-admin

或者kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值