使用Kubeadm在CentOS 7上快速安装k8s

一、Kubernetes(k8s)

它主要由节点(就可以理解成一台主机,物理机、虚拟机等)构成,分为主节点和工作节点(或从节点)。k8s需要实现etcd集群来管理分布式配置,还需要外部的网络插件实现网络架构,如Overlay网络(Flannel)。主节点上包括API服务器(API Server)、控制器管理器(Controller-Manager)、调度程序(Scheduler,执行调度任务)、分布式键值数据库etcd(存储集群和集群状态的配置数据)、kubectl实用程序。在工作节点上包括kubelet(创建、启动、删除容器等)和kube-proxy(端口转发)、Pod(一个或多个容器)。

二、使用Kubeadm在CentOS7上快速安装k8s

环境准备:创建三台VM,并设置静态IP。

三台主机配置及安装的组件:

k8s-master(192.168.0.245)(8G内存+40G磁盘+2个CPU):包括etcd、kubectl等。注意主节点至少要2个CPU,否则会出问题。

k8s-worker1(192.168.0.246)(4G内存+40G磁盘+1个CPU):包括kubelet等。

k8s-worker2(192.168.0.247)(4G内存+40G磁盘+1个CPU):包括kubelet等。

配置静态IP示例:

编辑文件:etho是网卡名称

vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改Onboot=yes,bootPROTO=static

添加如下内容:IPADDR需要更换

IPADDR=192.168.0.245
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=114.114.114.114
DNS2=8.8.8.8

重启网络服务,若是重启网络服务不生效,最好重启电脑(reboot命令)

systemctl restart network

安装过程:

1.主节点上安装

(1)设置主机名并修改/etc/hosts文件、禁用SELinux、修改防火墙规则

修改主机名:

hostnamectl set-hostname ‘ks-master’

编辑/etc/hosts文件,添加以下内容(工作节点也要如此):

192.168.0.245 k8s-master
192.168.0.246 k8s-worker1
192.168.0.247 k8s-worker2

禁用SELinux:

setenforce 0

修改文件:vi /etc/sysconfigselinux,将SELINUX设为disabled

重启生效:reboot

修改防火墙规则:

firewall-cm --permanent --add-port=6443/tcp
firewall-cm --permanent --add-port=2379-2380/tcp
firewall-cm --permanent --add-port=10250/tcp
firewall-cm --permanent --add-port=10251/tcp
firewall-cm --permanent --add-port=10252/tcp
firewall-cm --permanent --add-port=10255/tcp
firewall-cmd --reload #重新加载防火墙
modprobe br_netfilter #生成文件/proc/sys/net/bridge/bridge-nf-call-iptables
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables  #写 1 进入文件/proc/sys/net/bridge/bridge-nf-call-iptables

(2)安装Docker

安装一些必要的系统工具:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件源信息:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存:

sudo yum makecache fast

安装 Docker:

sudo yum -y install docker

启动 Docker 后台服务并设置开机启动:

systemctl start docker && systemctl enable docker

验证:出现版本号表示安装成功

docker -v

(3)安装kubeadm

先加软件包存储库,编辑文件:

vi /etc/yum.repos.d/kubernetes.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

安装kubeadm: 

yum install -y kubeadm

启动 kubelet服务并设置开机启动:

systemctl restart kubelet&& systemctl enable kubelet

(4)清楚swap,初始化kubeadm

swapoff -a #清除swap
kubeadm init

出现“successfully”表示成功。

执行下面命令(这命令会有提示的),以root身份即可使用该集群了

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

注意:若出现什么问题可以执行kubeadm reset清除安装环境,在重新初始化kubeadm init

(5)创建Overlay网络(Flannel),使不同主机的Pod通信

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

(6)验证

kubectl  get nodes #查看所有的节点,可能不会马上就出现ready状态,大致等待了8分钟,与镜像的拉取有关,这只能取决于网络
kubectl get Pods --all-namespaces #获取Pod

2.工作节点上安装

(1)设置主机名并修改/etc/hosts文件、禁用SELinux、修改防火墙规则

修改主机名:hostnamectl set-hostname ‘ks-worker1’,其他参见主节点上安装

修改防火墙规则:

firewall-cm --permanent --add-port=10250/tcp
firewall-cm --permanent --add-port=10255/tcp
firewall-cm --permanent --add-port=30000-32767/tcp
firewall-cm --permanent --add-port=6783/tcp
firewall-cmd --reload #重新加载防火墙
modprobe br_netfilter #生成文件/proc/sys/net/bridge/bridge-nf-call-iptables
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables  #写 1 进入文件/proc/sys/net/bridge/bridge-nf-call-iptables

(2)安装Docker

参见主节点上安装

(3)安装kubeadm

先加软件包存储库,编辑下列文件:

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

添加以下内容:参见主节点上安装

 kubelet服务设置开机启动:

systemctl enable kubelet

(4)清除swap, 加入主节点

swapoff -a #清除swap
kubeadm join 192.168.0.245:6443 --token kxv70u.sxcvz4u1uusanjyv \
    --discovery-token-ca-cert-hash sha256:556aa9b8aa5f026b275e5358ae05c9ad194e7fc1987b270c904320b67c6c1118

出现“Node join complete”表示成功。上述命令在主节点执行kubctl之后会出现,主要就是token的要与主节点上一致。

(5)验证(在主节点上执行下列命令)

kubectl get nodes #查看所有的节点,可能不会马上就出现ready状态,大致等待了7-8分钟,与镜像的拉取有关,这只能取决于网络

附:添加可视化界面dashboard

方法一:这种方法由于连不上外网导致失败。可以参考方法二.

部署dashboard:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml 

查看是否安装成功,kubernetes-dashboard会running中

kubectl get pods -n kube-system 

以打补丁方式修改dasboard的访问方式,修改访问port, svc是service的简称

kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

执行命令查看修改端口效果

kubectl get svc -n kube-system

效果如下:

官方默认需要使用火狐浏览器访问:https://192.168.0.245:31042,其他浏览器访问出现会不安全证书问题

有两种方式进行登录,目前就学了token方式登录,获取token:命令为:

kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

将token输入即可登录

使用Kubeadm在CentOS 7上快速安装k8s_第1张图片

方法二.

1.下载镜像

images=(kubernetes-dashboard-amd64:v1.6.0)
for imageName in ${images[@]} ; do
  docker pull k8scn/$imageName
  docker tag k8scn/$imageName gcr.io/google_containers/$imageName
  docker rmi k8scn/$imageName
done

2.编辑yml文件:vi kube-dashboard.yml 

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
    spec:
      containers:
      - name: kubernetes-dashboard
        image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.0
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
          # Uncomment the following line to manually specify Kubernetes API server Host
          # If not specified, Dashboard will attempt to auto discover the API server and connect
          # to it. Uncomment only if the default does not work.
          # - --apiserver-host=http://my-address:port
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
      serviceAccountName: kubernetes-dashboard
      # Comment the following tolerations if Dashboard must not be deployed on master
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 9090
    nodePort: 30006
  selector:
    k8s-app: kubernetes-dashboard

3.创建dashboard服务:

kubectl create -f kube-dashboard.yml 

4.验证,执行下列命令可以看见kubernetes-dashboard-77d95884d8-fqt8n处于Running状态表明配置成功

 kubectl get pods --all-namespaces -o wide

浏览器访问:192.168.0.245:30006即可

提示:30006是在kube-dashboard.yaml 文件中nodePort 配置的,任意配置,需要在30000以上。

安装过程出现的问题以及解决方案:

1)执行命令:sysctl net.bridge.bridge-nf-call-iptables=1出现sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory

解决方案:需要执行命令modprobe br_netfilter

2)获取token的命令,这个是用于在dashboard登录时用

kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

常用命令:(随时更新)

(1)删除工作节点:

工作节点上执行命令:

kubeadm reset

主节点执行命令:

kubectl drain [工作节点name] --delete-local-data --force --ignore-daemonsets 
kubectl delete node [工作节点name] ​​​​​​​

参考:

1.菜鸟网站Docker安装

2.书籍蒋彪《Docker微服务架构实战

 

你可能感兴趣的:(云计算)