K8S集群搭建

  • 本集群搭建在 aws上面,使用的是UBUNTU18.04系统
  • 集群环境如下:
master节点: 172.31.25.36
node1节点: 172.31.21.5
node2节点: 172.31.23.174
  • 安装docker,参考以下文章
  • 安装k8s
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
echo " " >>  /etc/profile
echo "## setting for k8s" >> /etc/profile
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
. /etc/profile
kubeadm init --apiserver-advertise-address=172.31.25.36 --pod-network-cidr=192.168.16.0/20  ## 初始化master
curl -L "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" > weave.yaml  ##  安装weave网络
修改 weave.yaml  再env下加入:
  - name: IPALLOC_RANGE
    value: 192.168.16.0/20
kubectl  apply -f weave.yaml
kubectl get pods -n kube-system -o wide ## 查看pods状态
kubeadm join 172.31.25.36:6443 --token lbm7wf.hiwr8d1ed5nxkxfh \
    --discovery-token-ca-cert-hash sha256:b2758c8b463658df45f0c2a665b5985fdb302c3efbe260921ff4a56b84c8445a  ## 在node节点运行,将node加入到master当中
kubectl get nodes ## 查看集群状态
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml  ## 安装kubernetes-dashboard
  • 创建一个dashboard登录用户
vi jiang-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jiang
  namespace: kube-system
vi jiang-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard:jiang
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: jiang
  namespace: kube-system
kubectl create -f jiang-user-role-binding.yaml
kubectl get secret -n kube-system | grep jiang ## 得到jiang-token-fhrsq 这个用户的对象
kubectl describe secret/jiang-token-fhrsq -n kube-system  ## 得到token,登录的时候就使用这个token登录

docker的使用

  • --link表示连接到redis这个容器; -p 是映射端口 ;-e 是设置环境变量
docker run -d --link redis --name flask-redis -p 5000:5000 -e REDIS_HOST=redis xiang/flash-redis
  • 不同宿主机里面容器的通信,通过Overlay网络和etcd实现
  • 数据持久化
docker run -d -v mysql:/var/lib/mysql --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

多机器通信环境搭建

  1. 环境是node1为:172.16.50.32; node2为: 172.16.50.33;系统都为CENTOS7系统
  2. 安装etcd集群,并用下面命令运行,系统需要放开2379和2380两个端口:
nohup /opt/etcd/etcd --name docker-node1 --initial-advertise-peer-urls http://172.16.50.32:2380 \
--listen-peer-urls http://172.16.50.32:2380 \
--listen-client-urls http://172.16.50.32:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://172.16.50.32:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://172.16.50.32:2380,docker-node2=http://172.16.50.33:2380 \
--initial-cluster-state new&

nohup /opt/etcd/etcd --name docker-node2 --initial-advertise-peer-urls http://172.16.50.33:2380 \
--listen-peer-urls http://172.16.50.33:2380 \
--listen-client-urls http://172.16.50.33:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://172.16.50.33:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://172.16.50.32:2380,docker-node2=http://172.16.50.33:2380 \
--initial-cluster-state new&

/opt/etcd/etcdctl cluster-health ##查看etcd集群状态
  1. 停止运行docker服务,并用下面的命令在相应的节点上运行,需要放行2375和7496两个端口
/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://172.16.50.32:2379 --cluster-advertise=172.16.50.32:2375&

/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://172.16.50.33:2379 --cluster-advertise=172.16.50.33:2375&
  1. 创建一个overlay的网络, 只在一个节点上面建立就可以了
docker network create -d overlay demo
  1. 测试在node1和node2上面分别创建一个docker
docker run -d --name test1 --net demo busybox sh -c "while true;do sleep 3600;done"  # node1上面运行
docker run -d --name test2 --net demo busybox sh -c "while true;do sleep 3600;done"  # node2上面运行

使用compose搭建一个wordpress站点

version: '3'
services:
  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: wordpress_password
    networks:
      - my-bridge
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: wordpress_password
      MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-bridge
volumes:
  mysql-data:
networks:
  my-bridge:
    driver: bridge

Linux系统安装docker

docker的趋势是浩浩荡荡啊,下面是各个系统安装docker的脚本

#!/bin/bash
updateKernel(){
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
    yum --enablerepo=elrepo-kernel install kernel-lt -y
    sed -i "s/default=1/default=0/g" /etc/grub.conf
    sed -i "s/default=1/default=0/g" /boot/grub/grub.conf
}

centos6InstallDocker(){
    kernalVersion=`uname -r | cut -d "." -f 1`
    if [ $kernalVersion  -lt 3 ];then
        updateKernel
    fi
    yum -y install epel-release
    yum -y install docker-io
    service docker start
    chkconfig docker on
    docker version
}

centos7InstallDocker(){
    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager  --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum install docker-ce -y
    systemctl start docker
    systemctl enable docker
    docker version
}

ubuntuInstallDocker(){
    sudo apt-get remove docker docker-engine docker.io containerd runc
    sudo apt-get update
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt-get update
    sudo apt-get install docker-ce -y
    ## test docker
    sudo docker container run hello-world
}

centosVersion=`cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/'`
if [ $centosVersion -eq 6 ];then
    centos6InstallDocker
elif [ $centosVersion -eq 7 ];then
    centos7InstallDocker
else
    echo "Your version is wrong , Plese check !!!"
    exit
fi